我在R中有一个数据帧,结构如下。
> testData
date exch.code comm.code oi
1 1997-12-30 CBT 1 468710
2 1997-12-23 CBT 1 457165
3 1997-12-19 CBT 1 461520
4 1997-12-16 CBT 1 444190
5 1997-12-09 CBT 1 446190
6 1997-12-02 CBT 1 443085
....
77827 2004-10-26 NYME 967 10038
77828 2004-10-19 NYME 967 9910
77829 2004-10-12 NYME 967 10195
77830 2004-09-28 NYME 967 9970
77831 2004-08-31 NYME 967 9155
77832 2004-08-24 NYME 967 8655我想要做的是生成一个表格,显示给定日期和商品的每个交换代码的总oi。因此,这些行将由以下部分组成
unique(testData$date)这些列将是
unique(testData$comm.code)每个单元格将是给定一天内所有exch.codes的总oi。
谢谢,
发布于 2010-05-25 04:35:19
plyr包在这方面做得很好,您应该通过一次ddply()调用就可以完成这项工作。类似于(未测试的)
ddply(testData, .(date,comm.code), function(x) sum(x$oi))应该行得通。
发布于 2010-05-25 05:05:02
# get it all aggregated
dfl <- aggregate(oi ~ date + comm.code, testData, sum)
# rearrange it so that it's like you requested
uc <- unique(df1$comm.code)
dfw <- with( df1, data.frame(data = unique(date), matrix(oi, ncol = length(uc))) )
names(dfw) <- c( 'date', uc)这将比等效的plyr命令快得多。而且,有一些方法可以将它重新排列在一个行中。重新排列的部分非常快。
发布于 2012-09-10 14:52:43
data.table解决方案
library(data.table)
DT <- data.table(testData)
DT[,sum(oi), by = list(date,comm.code)]https://stackoverflow.com/questions/2900058
复制相似问题