这是我的数据框:
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
答案 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