[英]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
如何创建一个新的数据框,以显示在相同的值下Col1
, Col2
和Day
发生了多少次? 因此,在此示例中,我将得到:
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.