首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中聚合这些数据

如何在R中聚合这些数据
EN

Stack Overflow用户
提问于 2010-05-25 04:22:39
回答 3查看 3.1K关注 0票数 6

我在R中有一个数据帧,结构如下。

代码语言:javascript
复制
> 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。因此,这些行将由以下部分组成

代码语言:javascript
复制
unique(testData$date)

这些列将是

代码语言:javascript
复制
unique(testData$comm.code)

每个单元格将是给定一天内所有exch.codes的总oi。

谢谢,

EN

回答 3

Stack Overflow用户

发布于 2010-05-25 04:35:19

plyr包在这方面做得很好,您应该通过一次ddply()调用就可以完成这项工作。类似于(未测试的)

代码语言:javascript
复制
ddply(testData, .(date,comm.code), function(x) sum(x$oi))

应该行得通。

票数 11
EN

Stack Overflow用户

发布于 2010-05-25 05:05:02

代码语言:javascript
复制
# 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命令快得多。而且,有一些方法可以将它重新排列在一个行中。重新排列的部分非常快。

票数 10
EN

Stack Overflow用户

发布于 2012-09-10 14:52:43

data.table解决方案

代码语言:javascript
复制
library(data.table)
DT <- data.table(testData)
DT[,sum(oi), by = list(date,comm.code)]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2900058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档