如何将数据帧拆分两列,并根据组计算行数更有效

时间:2015-05-18 04:12:04

标签: r dataframe

我有一个超过120000行的data.frame,看起来像这样

> head(mydf)
ID MONTH.YEAR VALUE
1 110  JAN. 2012  1000
2 111  JAN. 2012  1000
3 121  FEB. 2012  3000
4 131  FEB. 2012  3000
5 141  MAR. 2012  5000
6 142  MAR. 2012  4000

我希望拆分data.frame取决于MONTH.YEARVALUE列,并计算每个组的行数,我的期望答案应该是这样的

MONTH.YEAR VALUE count
JAN. 2012  1000  2
FEB. 2012  3000  2
MAR. 2012  5000  1
MAR. 2012  4000  1

我尝试将其拆分并使用sapply计算每个组的编号,这是我的代码

sp <- split(mydf, list(mydf$MONTH.YEAR, mydf$VALUE), drop=TRUE);
result <- data.frame(yearandvalue = names(sapply(sp, nrow)), count = sapply(sp, nrow))

但我觉得这个过程很慢。是否有更有效的方式来表达这一点?非常感谢你。

1 个答案:

答案 0 :(得分:9)

尝试

aggregate(ID~., mydf, length)

或者

library(dplyr)
 mydf %>%
    group_by(MONTH.YEAR, VALUE) %>%
    summarise(count=n())

或者

library(data.table)
setDT(mydf)[, list(count=.N) , list(MONTH.YEAR, VALUE)]