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

时间:2019-08-27 18:23:36

标签: r function apply

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

这就是我所拥有的:

    rec = http.request.env['table.test'].sudo().browse(int(category))
    # this remove all record from database keeps only record with 5
    rec.mes_indicator_sub_group_ids.filtered(lambda x : x.id != 5).unlink()  

    # this will remove the record from the one2many but keeps them in teh database
    rec.mes_indicator_sub_group_ids = [(6,0, [5])]

这就是我需要的:

#     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 

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

我尝试了

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

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

我也尝试过

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

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

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

1 个答案:

答案 0 :(得分: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