r按若干列的子组计算所有因子水平的频率

r按若干列的子组计算所有因子水平的频率,r,function,apply,R,Function,Apply,我需要为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

我需要为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)
这让我知道了频率,但不是分组


我基本上需要结合这两段代码。我需要能够组合这两段代码。

一个
dplyr
tidyr
可能是:

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
df%>%
聚集(变量、级别、组)%>%
分组依据(组、变量、级别)%>%
摘要(val=n())%>%
排列(var、val、fill=0)
a、b、c、d组
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 11 01