【问题标题】:R - How to put aggregated row results as columnsR - 如何将聚合行结果作为列
【发布时间】:2023-02-24 15:41:55
【问题描述】:

假设有数据帧 df

age category
12  A
15  B
12  A
13  C
14  B
14  D

我想使用聚合来查找每个年龄段的每个类别 {A、B、C、D} 中出现的次数。 A、B、C 和 D 的数量分别设置为列,因此输出数据框应如下所示

age A B C D
12  2 0 0 0
13  0 0 1 0
14  0 1 0 1
15  0 1 0 0

试图

agdf <- aggregate(df, by=list(df$age, df$category), FUN=length)

但这样做只会给我

age category x
12  A        2
15  B        1
14  B        1
13  C        1
14  D        1

如何将其按摩到所需的结构?

【问题讨论】:

  • table(df)甚至xtabs(~., df1)

标签: r dataframe aggregate


【解决方案1】:
xtabs(~., df1)

    category
age  A B C D
  12 2 0 0 0
  13 0 0 1 0
  14 0 1 0 1
  15 0 1 0 0

table(df1)
    category
age  A B C D
  12 2 0 0 0
  13 0 0 1 0
  14 0 1 0 1
  15 0 1 0 0

reshape2::dcast(df1, age~category)
  age A B C D
1  12 2 0 0 0
2  13 0 0 1 0
3  14 0 1 0 1
4  15 0 1 0 0

pivot_wider(df1, id_cols = age, names_from = category,
              values_from = category, values_fn = length, values_fill = 0)
# A tibble: 4 × 5
    age     A     B     C     D
  <int> <int> <int> <int> <int>
1    12     2     0     0     0
2    15     0     1     0     0
3    13     0     0     1     0
4    14     0     1     0     1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多