[英]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.