【问题标题】:Change output of aggregate function in r [duplicate]在r中更改聚合函数的输出[重复]
【发布时间】:2021-03-01 04:33:41
【问题描述】:

我有以下数据框,其中包含一个数字变量和 2 个字符。我想为每个字符值组合显示数字变量(z)的平均值。我使用聚合函数来做到这一点:

df <- data.frame(x=sample(c("a","b","c"),100,replace = T),
                 y=sample(c("A","B","C"),100, replace = T),
                 z=rnorm(100,2))
aggregate(df[,3],list(id1 = df[,1], id2 = df[,2]),mean)

输出如下所示:

 id1 id2        x
1   a   A 2.052119
2   b   A 2.058046
3   c   A 2.397236
4   a   B 2.342341
5   b   B 2.182605
6   c   B 2.227108
7   a   C 1.733620
8   b   C 1.725497
9   c   C 1.966901

我想把它改成这样,或者使用其他函数来给出下面的输出:

         a        b        c
A 2.052119 2.058046 2.397236
B 2.342341 2.182605 2.227108
C 1.733620 1.725497 1.966901

【问题讨论】:

  • 如果你将aggregate函数的输出存储在df1中,你可以做到tidyr::pivot_wider(df1, names_from = id1, values_from = x)

标签: r dataframe aggregate


【解决方案1】:

更简单的选择是xtabs 以获取sum

xtabs(z ~  y + x, df)

和tapply 为mean

with(df, tapply(z, list(y, x), FUN = mean))
#      a        b        c
#A 1.485499 2.785789 2.308899
#B 1.781358 2.406958 1.752952
#C 2.101626 1.873654 2.049453

或者使用pivot_wider 和values_fn 作为mean

library(tidyr)
pivot_wider(df, names_from = x, values_from = z, values_fn = mean)
# A tibble: 3 x 4
#  y         a     c     b
#  <chr> <dbl> <dbl> <dbl>
#1 A      1.49  2.31  2.79
#2 C      2.10  2.05  1.87
#3 B      1.78  1.75  2.41

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2021-09-17
    • 2020-08-01
    相关资源
    最近更新 更多