繁体   English   中英

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

[英]Aggregating dataframe by occurrences of 3 columns in R

这是我的数据框:

       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

这是使用dplyr软件包的一个好案例, 这里dplyr进行详细介绍。

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

这也可以写成

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

在基础R中,您可以仅使用ave创建一个“ count”列。 您实际上并没有指定要如何处理“ 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

最后,这是一个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

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

或使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM