2012-02-21 27 views
15

Tôi đang làm việc trong R và đọc csv có ngày và giờ trong cột đầu tiên của nó. Tôi muốn nhập tệp csv này trong R trước và sau đó chuyển nó thành sở thú.Đọc csv với ngày và giờ

Tôi đang sử dụng mã trong R

EURUSD <- as.xts(read.zoo("myfile.csv",sep=",",tz="",header=T)) 

tập tin csv của tôi chứa dữ liệu theo định dạng:

Date,Open,Low,High,Close 
2006-01-02 10:01:00,2822.9,2825.45,2822.1,2824.9 
2006-01-02 10:02:00,2825,2825.9,2824,2824.95 
2006-01-02 10:03:00,2824.55,2826.45,2824,2826.45 
2006-01-02 10:04:00,2826.45,2826.45,2824.9,2825.5 
2006-01-02 10:05:00,2825.15,2825.5,2824,2824.85 
2006-01-02 10:06:00,2824.7,2825.5,2823.7,2823.8 
2006-01-02 10:07:00,2823.95,2824.45,2823.55,2824 
2006-01-02 10:08:00,2824,2824.85,2823.5,2824.85 
2006-01-02 10:09:00,2824.25,2825.45,2824,2825.45 
2006-01-02 10:10:00,2825.2,2827,2825,2827 

Khi tôi chạy lệnh trên để nhập dữ liệu vào RI được folowwwing lỗi:

Error in as.POSIXlt.character(x, tz, ...) : 
    character string is not in a standard unambiguous format 

Tôi đã cố gắng tìm tất cả các cách để sắp xếp vấn đề. Tôi đọc rất nhiều blog trên mạng nhưng không có phương pháp nào phù hợp với tôi.

Tôi hy vọng ai đó sẽ giúp tôi.

+1

Có vẻ như có điều gì đó trong cột ngày của bạn đang làm hỏng nó. Có thể là một ô trống, "-", ",", "n.a." hay đại loại thế. –

+0

Bạn có chắc 'sep' của bạn là dấu phẩy không?ví dụ về định dạng tệp csv của bạn trông giống như là tab thay thế? –

+0

Nó được phân tách bằng dấu phẩy. Tôi mở tập tin csv của tôi trong notepad và nó cho thấy rõ ràng dấu phẩy tách ra – user395882

Trả lời

5

Dường như lỗi là do R không nhận dạng định dạng cột ngày của bạn (nó không thể hoạt động - ngày/tháng/năm? Tháng/ngày/năm? V.v.).

Bạn có thể cho R biết định dạng của nó là sử dụng đối số format tới read.zoo (xem ?strptime cho các thông số bạn có thể sử dụng).

Ví dụ, nếu nó được ngày/tháng/năm giờ (24 giờ đồng hồ): phút, bạn có thể làm:

EURUSD <- as.xts(read.zoo(file_name, 
          sep=',', 
          tz='', 
          header=T, 
          format='%d/%m/%Y %H:%M:%S')) # see the 'format' argument? 

(Lưu ý - trong câu hỏi của bạn đoạn dữ liệu csv bạn thấy isn 't được phân tách bằng dấu phẩy).

+0

Tôi đã thử dùng read.zoo ("C: /Users/ParamJeet/Desktop/test/eurusd.csv", sep = ",", tz = "", format = " % Y-% m-% d% H:% M ", header = T) nhưng nó cho tôi lỗi: Lỗi trong read.zoo (" C: /Users/ParamJeet/Desktop/test/eurusd.csv ", sep = ",",: chỉ mục có 13428 mục nhập không hợp lệ tại hàng dữ liệu: 323559 323560 323561 323562 323563 – user395882

+0

Sau đó, hãy xem những ows trong bạn csv - đoán của tôi là họ có một định dạng khác nhau. –

+0

nếu tôi mở sổ ghi chú của mình, có vẻ như Ngày, Mở, Thấp, Cao, Đóng 2006-01-02 10: 01: 00,2822.9,2825.45,2822.1,2824.9 nếu tôi mở dữ liệu excel trông giống như Ngày \t Mở \t Thấp \t cao \t Đóng 1/2/2006 10:01 \t 2822,9 \t 2825,45 \t 2822,1 \t 2824,9 1/2/2006 10:02 2825,9 2824,95 này nghĩ rằng sự khác biệt này gây ra vấn đề. – user395882

8

Mặc dù đây có vẻ là một bài đăng cũ nhưng tôi muốn chia sẻ kinh nghiệm của mình vì tôi đã trải qua quá trình rất bực bội khi cố tải dữ liệu chuỗi thời gian csv vào R. Vấn đề ở trên là excel thay đổi định dạng ngày và giờ tới %m/%d/%Y %H:%M sau đây, về cơ bản nó giảm số giây. Nếu bạn đọc tệp có định dạng này và bạn có dữ liệu độ phân giải thứ hai, bạn sẽ nhận được nhiều kết hợp thời gian ngày giống nhau. vì vậy bạn không thể đơn giản sử dụng định dạng bỏ qua giây vì nó cung cấp thông báo lỗi sau. "chuỗi ký tự không ở định dạng rõ ràng chuẩn"

Giải pháp là quay lại excel và thay đổi định dạng của cột ngày thành %m/%d/%Y %H:%M:%S. Bạn có thể thực hiện điều đó bằng cách chọn định dạng mặc định thời gian ngày gần nhất theo định dạng mong muốn (trong trường hợp này là %m/%d/%Y %H:%M và sau đó thêm :ss vào cuối. Lưu tệp dưới dạng tệp csv rồi đọc tệp sau:

Data<-read.zoo("file.csv", tz="", header=TRUE,format='%m/%d/%Y %H:%M:%S') 

này đã làm việc cho tôi và tôi đọc một tập tin đó có khoảng 900K hàng.

0

đọc các tập tin mà không sử dụng as.xtc, khi cột ngày giống như một nhân vật. và sau đó chuyển đổi ngày để lớp POSIXlt với chức năng này:

library("chron") 
DateConvert<-function(x){ 
    dt<-strsplit(x,split = "T") 
    dt<-unlist(dt) 
    d1<-dt[1:length(dt) %% 2==1 ] 
    d2<-dt[1:length(dt) %% 2==0 ] 
    a<-as.POSIXlt(chron(dates.=d1, times.=d2, format = c(dates = "y-m-d", times = "h:m:s"))) 
    return(a) 
} 

DateConvert('Your column') 

và sau đó sử dụng hàm as.xts trên dữ liệu của bạn.

Các vấn đề liên quan