通过在R中出现3列来聚合数据帧

时间:2014-04-05 04:00:21

标签: r dataframe aggregate

这是我的数据框:

       Col1      Col2          Col3       Day       
 1       12         2  14031100000417017  70
 2       10         3  14031100000537996   6
 3        7         4  14031100000636479  11
 4       12         2  14031100001124050  70
 5       12         2  14031100001712518  70
 6       10         3  14031100001920801   6

如何创建新数据框,向我显示Col1Col2Day出现的次数相同?所以在这个例子中我会得到:

       Col1      Col2          Col3       Day   Count    
 1      12         2   14031100000417017  70      3
 2      10         3   14031100000537996   6      2
 3       7         4   14031100000537996  11      1

4 个答案:

答案 0 :(得分:1)

这是使用dplyr包的一个很好的案例,详细介绍了here

library(dplyr)
my.dataframe %.% group_by(Col1, Col2, Day) %.% summarise(Count=n())

这也可以写成

summarise(group_by(my.dataframe, Col1, Col2, Day), Count=n())

答案 1 :(得分:0)

在基础R中,您只需使用ave创建“计数”列。你没有真正指定你想要如何处理“Col3”,所以我把它留了出来:

mydf$count <- ave(rep(1, nrow(mydf)), 
                  mydf[c("Col1", "Col2", "Day")], 
                  FUN = length)

mydf
#   Col1 Col2        Col3 Day count
# 1   12    2 1.40311e+16  70     3
# 2   10    3 1.40311e+16   6     2
# 3    7    4 1.40311e+16  11     1
# 4   12    2 1.40311e+16  70     3
# 5   12    2 1.40311e+16  70     3
# 6   10    3 1.40311e+16   6     2

unique(mydf[c("Col1", "Col2", "Day", "count")])
#   Col1 Col2 Day count
# 1   12    2  70     3
# 2   10    3   6     2
# 3    7    4  11     1

答案 2 :(得分:0)

要完成它,这是一个data.table解决方案:

library(data.table)
mydt <- data.table(mydf)
mydt[, length(Col3), list(Col1, Col2, Day)]

#    Col1 Col2 Day V1
# 1:   12    2  70  3
# 2:   10    3   6  2
# 3:    7    4  11  1

第三个参数是分组因子列表,而第二个参数是您要应用于每个组的函数。

答案 3 :(得分:0)

或使用plyr:

require(plyr)
ddply(df, .(Col1, Col2, Day), summarize, cnt = length(Col1))

aggregate

aggregate(Col3 ~ Col1 + Col2 + Day, df, length)

  Col1 Col2 Day Col3

1   10    3   6    2
2    7    4  11    1
3   12    2  70    3