我需要为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))
这让我得到了频率,但不是按组的。
我基本上需要以某种方式组合这两段代码。我需要能够将这两段代码结合起来。
答案 0 :(得分:1)
一种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