按子组计算多列因子水平的频率

3

我需要在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)

这让我得到了频率,但没有按组分类。

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

1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接