根据前 5 个值汇总 R 中的多个列
Summarise multiple Columns In R Based On Top 5 Values
我正在尝试根据 R 中每个变量的前 5 个值汇总多个列,数据示例如下。
df
ID A B C D
A 325 68 8 8
B 308 85 2 7
B 342 99 6 2
A 439 83 9 6
A 278 60 10 2
A 367 78 14 4
C 136 59 12 5
C 259 73 11 4
B 338 79 5 6
B 461 99 3 7
D 364 73 14 4
D 238 80 3 8
A 266 54 10 10
我当前的代码如下所示:
df2 <- df %>% group_by(ID) %>% top_n(5, A) %>% summarise(ATop5 = mean(A))
df2 中的输出显示了我需要的信息。
但是我在原始数据框中有多个变量,我希望 运行 出现在与 df2 相同的输出中。
目前我正在为每个变量生成一个单独的 df,然后通过 ID 列组合成一个 df。
少了这一步会有很大帮助。
在 base 中,您可以将 aggregate
与 . ~ ID
结合使用,对所有剩余的带组列应用函数。
aggregate(. ~ ID, df, function(x) mean(tail(sort(x),5)))
# ID A B C D
#1 A 335.00 68.6 10.2 6.0
#2 B 362.25 90.5 4.0 5.5
#3 C 197.50 66.0 11.5 4.5
#4 D 301.00 76.5 8.5 6.0
选项summarise_at
library(dplyr)
df %>%
group_by(ID) %>%
summarise_at(vars(A:D), ~ mean(tail(sort(.), 5)))
我正在尝试根据 R 中每个变量的前 5 个值汇总多个列,数据示例如下。
df
ID A B C D
A 325 68 8 8
B 308 85 2 7
B 342 99 6 2
A 439 83 9 6
A 278 60 10 2
A 367 78 14 4
C 136 59 12 5
C 259 73 11 4
B 338 79 5 6
B 461 99 3 7
D 364 73 14 4
D 238 80 3 8
A 266 54 10 10
我当前的代码如下所示:
df2 <- df %>% group_by(ID) %>% top_n(5, A) %>% summarise(ATop5 = mean(A))
df2 中的输出显示了我需要的信息。
但是我在原始数据框中有多个变量,我希望 运行 出现在与 df2 相同的输出中。
目前我正在为每个变量生成一个单独的 df,然后通过 ID 列组合成一个 df。
少了这一步会有很大帮助。
在 base 中,您可以将 aggregate
与 . ~ ID
结合使用,对所有剩余的带组列应用函数。
aggregate(. ~ ID, df, function(x) mean(tail(sort(x),5)))
# ID A B C D
#1 A 335.00 68.6 10.2 6.0
#2 B 362.25 90.5 4.0 5.5
#3 C 197.50 66.0 11.5 4.5
#4 D 301.00 76.5 8.5 6.0
选项summarise_at
library(dplyr)
df %>%
group_by(ID) %>%
summarise_at(vars(A:D), ~ mean(tail(sort(.), 5)))