【问题标题】:r calculate frequencies for all factor levels by subgroup for several columnsr 按子组为几列计算所有因子水平的频率
【发布时间】:2019-08-27 18:23:36
【问题描述】:

我需要为 R 中的几列按组计算所有变量级别的频率。我有一个包含几列的数据框,包括一个分组变量。其他列有 3 个级别 - 0、1 和 NA。

这就是我所拥有的:

#     a     b     c     d   group
1     1     1     1     NA    1
2     1     0     1     0     1
3     0     0     NA    1     1
4     0     NA    1     0     2
5     1     1     0     0     2
6     1     0     0     1     2
7     NA    0     1     NA    2 

这是我需要的:

group   level   a   b   c   d
1   0   1   2   0   1
    1   2   1   2   1
    NA  0   0   1   1
2   0   1   2   2   2
    1   2   1   2   1
    NA  1   1   0   1

我使用 dplyr 和 lapply 来解决这个问题。

我试过了

df %>%
  mutate(a = factor(a, levels=0:1)) %>%
  group_by(group, a) %>%
  summarise(freq=n()) %>%
  complete(a, fill=list(freq=0))

这得到了我想要的,但我必须按每一列来做。

我也试过

lapply(df[(2:70)],  table)

这让我得到了频率,但不是按组。

我基本上需要以某种方式将这两段代码结合起来。我需要能够结合这两段代码。

【问题讨论】:

    标签: r function apply


    【解决方案1】:

    dplyrtidyr 的一种可能性可能是:

    df %>%
     gather(var, level, -group) %>%
     group_by(group, var, level) %>%
     summarise(val = n()) %>%
     spread(var, val, fill = 0)
    
      group level     a     b     c     d
      <int> <int> <dbl> <dbl> <dbl> <dbl>
    1     1     0     1     2     0     1
    2     1     1     2     1     2     1
    3     1    NA     0     0     1     1
    4     2     0     1     2     2     2
    5     2     1     2     1     2     1
    6     2    NA     1     1     0     1
    

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 2019-01-22
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多