2013-04-25 104 views
3

R讀取CSV文件,我有了一個時間戳列作爲一個字符串有時間戳

15,1035,4530,3502,2,892,482,0,20060108081608,2,N 
15,1034,7828,3501,3,263,256,0,20071124175519,3,N 
15,1035,7832,4530,2,1974,1082,0,20071124193818,7,N 
15,2346,8381,8155,3,2684,649,0,20080207131002,9,N 

我使用read.csv選項,但與該問題的csvfile一旦我完成導入數據列的樣子:

1  15  1035 4530   3502  2  892 482  0 2.006011e+13   2   N 
2  15  1034 7828   3501  3  263 256  0 2.007112e+13   3   N 
3  15  1035 7832   4530  2  1974 1082  0 2.007112e+13   7   N 
4  15  2346 8381   8155  3  2684 649  0 2.008021e+13   9   N 

有沒有去剝去字符串的日期,因爲它得到讀取(CSV文件中確實有頭:此處被拆除,以保持數據匿名)。如果我們在閱讀時無法剝離,那麼最好的方法是什麼?

+2

是的,請參閱'read.table'(其中'read.csv'包裝),特別是'colClasses'參數 – 2013-04-25 16:42:08

回答

2

這裏有2種方法:

使用zoo包。我個人更喜歡這一個。我把你的數據作爲時間序列來處理。

library(zoo) 

read.zoo(text='15,1035,4530,3502,2,892,482,0,20060108081608,2,N 
15,1034,7828,3501,3,263,256,0,20071124175519,3,N 
15,1035,7832,4530,2,1974,1082,0,20071124193818,7,N 
15,2346,8381,8155,3,2684,649,0,20080207131002,9,N', 
     index=9,tz='',format='%Y%m%d%H%M%S',sep=',') 

        V1 V2 V3 V4 V5 V6 V7 V8 V10 V11 
2006-01-08 08:16:08 15 1035 4530 3502 2 892 482 0 2 N 
2007-11-24 17:55:19 15 1034 7828 3501 3 263 256 0 3 N 
2007-11-24 19:38:18 15 1035 7832 4530 2 1974 1082 0 7 N 
2008-02-07 13:10:02 15 2346 8381 8155 3 2684 649 0 9 N 

read.table使用colClasses的說法,在註釋中:

dat <- read.table(text='15,1035,4530,3502,2,892,482,0,20060108081608,2,N 
15,1034,7828,3501,3,263,256,0,20071124175519,3,N 
15,1035,7832,4530,2,1974,1082,0,20071124193818,7,N 
15,2346,8381,8155,3,2684,649,0,20080207131002,9,N', 
      colClasses=c(rep('numeric',8), 
         'character','numeric','character') 
         ,sep=',') 


strptime(dat$V9,'%Y%m%d%H%M%S') 

1] "2006-01-08 08:16:08" "2007-11-24 17:55:19" 
    "2007-11-24 19:38:18" "2008-02-07 13:10:02" 
+0

使用read.csv提供的第二種方法,但得到以下警告:警告消息: 在read.table(file = file,header = header,sep = sep,quote = quote,: cols = 11!= length(data)= 12 – 2013-04-25 17:56:18

0

李嘉圖說,你可以用read.csv設置列類。在這種情況下,我建議將它們導入爲字符,一旦加載了csv,將它們轉換爲strptime()的日期。

例如:

test <- '20080207131002' 
strptime(x = test, format = "%Y%m%d%H%M%S") 

將返回一個POSIXlt對象W /日期/時間信息。