[英]R dplyr: Group and summarize while retaining other non-numeric columns
我想計算 dataframe 中多列的分組均值。在此過程中,我將希望保留不隨分組變量變化的非數字列。 這是一個簡單的例子。
library(dplyr)
#create data frame
df <- data.frame(team=c('A', 'A', 'B', 'B', 'B', 'C', 'C'),
state=c('Michigan', 'Michigan', 'Michigan', 'Michigan', 'Michigan','AL', 'AL'),
region=c('Midwest', 'Midwest', 'Midwest', 'Midwest', 'Midwest', 'South', 'South'),
pts=c(5, 8, 14, 18, 5, 7, 7),
rebs=c(8, 8, 9, 3, 8, 7, 4),
ast=c(8,6,7,5,3,0,9))
結果數據字段:
> df
team state region pts rebs ast
1 A Michigan Midwest 5 8 8
2 A Michigan Midwest 8 8 6
3 B Michigan Midwest 14 9 7
4 B Michigan Midwest 18 3 5
5 B Michigan Midwest 5 8 3
6 C Alabama South 7 7 0
7 C Alabama South 7 4 9
用“團隊”作為分組變量按均值進行總結非常簡單:
> df %>%
+ group_by(team) %>%
+ summarise_at(vars(pts, rebs, ast), list(mean))
# A tibble: 3 × 4
team pts rebs ast
<chr> <dbl> <dbl> <dbl>
1 A 6.5 8 7
2 B 12.3 6.67 5
3 C 7 5.5 4.5
但是我如何保留那些其他 ID 列(在團隊內部統計數據中不會改變)。 換句話說,我如何獲得以下內容:
team state region pts rebs ast
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 A Michigan Midwest 6.5 8 7
2 B Michigan Midwest 12.3 6.67 5
3 C Alabama South 7 5.5 4.5
謝謝!!
由於以下原因,我建議使用您需要保留在group_by()
動詞中的所有列:
如果這些列不同,您需要 select 這些不同值之一,這將迫使您為此使用一些 function。
如果它們相等,則group_by()
動詞就足夠了。
df %>%
group_by(team, state, region) %>%
summarise_at(vars(pts, rebs, ast), list(mean))
使用data.table
方法
setDT(df)
vars = c("pts", "rebs", "ast")
df[, (vars) := lapply(.SD, mean, na.rm = T), .SDcols = vars, by = "team"][, .SD[1], by = "team"]
Output:
team state region pts rebs ast
1: A Michigan Midwest 6.50000 8.000000 7.0
2: B Michigan Midwest 12.33333 6.666667 5.0
3: C AL South 7.00000 5.500000 4.5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.