2013-02-28 64 views
5

我有以下格式的.csv文件:如何按日期分組data.frame?

Date  ,  Time , Value 
1899-01-01 , 4:00:00 , 1 
1899-01-01 , 4:01:00 , 2 
1899-01-01 , 4:02:00 , 3 
1899-01-01 , 4:03:00 , 4 
1899-01-01 , 4:04:00 , 5 
1900-08-22 , 22:00:00 , 101 
1900-08-22 , 22:01:00 , 102 
2013-08-29 , 4:00:00 , 1000 
2013-02-29 , 4:02:00 , 1001 
2013-02-29 , 4:03:00 , 1002 

是否有可能group by date產生在以下格式的data.table

Date  , Vector(variable length) 
1899-02-28, c(1,2,3,4,5) 
1900-08-22, c(101,102) 
1900-08-22, c(1000,1001,1002) 

這是最好的,我有那麼遠(後嘗試的天數):

raw <- read.csv(pathName, header = TRUE, stringsAsFactors = FALSE) 
groupedByDate <- split(raw, raw$Date) 

然而,這似乎產生一個非常寬的表,每個d一列吃,這是不是很接近我想要的。

回答

8

怎麼樣在data.frame名爲「是myDF」作爲使用aggregate如下:

> temp <- aggregate(Value ~ Date, mydf, as.vector) 
> temp 
     Date   Value 
1 1899-01-01 1, 2, 3, 4, 5 
2 1900-08-22  101, 102 
3 2013-02-29  1001, 1002 
4 2013-08-29   1000 

「值」列現在是一個list其中包含您的載體。

> temp$Value 
$`0` 
[1] 1 2 3 4 5 

$`1` 
[1] 101 102 

$`2` 
[1] 1001 1002 

$`3` 
[1] 1000 

什麼你可能尋找與split是:

> split(mydf$Value, mydf$Date) 
$`1899-01-01 ` 
[1] 1 2 3 4 5 

$`1900-08-22 ` 
[1] 101 102 

$`2013-02-29 ` 
[1] 1001 1002 

$`2013-08-29 ` 
[1] 1000 
+0

謝謝,這個作品絕對出色!我會將你的答案標記爲答案,因爲你是第一個。 – Contango 2013-02-28 18:48:58

3

使用aggregatepaste0

> aggregate(Value ~ Date, data=DF, FUN=paste0) 
     Date   Value 
1 1899-01-01 1, 2, 3, 4, 5 
2 1900-08-22  101, 102 
3 2013-02-29  1001, 1002 
4 2013-08-29   1000 
+0

非常感謝你對此答案非常感謝。附:我其實想要一個數字矢量,所以它的「c」而不是「粘貼」。 – Contango 2013-02-28 18:50:54