簡體   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