在R中按(T,C)分组统计组内行数的问题及错误解决
问题描述
原始数据集如下:
D T C <dbl> <dbl> <chr> 1 1 2000 A 2 2 2000 A 3 3 2000 A 4 1 2000 B 5 5 2000 B 6 6 2000 B 7 1 2001 A 8 2 2001 A 9 3 2001 B
需要按(T,C)分组,给每行添加对应组的总行数,期望结果如下:
D T C count <dbl> <dbl> <chr> <int> 1 1 2000 A 3 2 2 2000 A 3 3 3 2000 A 3 4 1 2000 B 3 5 5 2000 B 3 6 6 2000 B 3 7 1 2001 A 2 8 2 2001 A 2 9 3 2001 B 1
使用以下代码后,所有count值均为5,不符合预期:
sample%>%group_by(T,C) %>% mutate(count = n_distinct(D))
解决方案
问题出在函数选择错误:n_distinct(D)用于统计每组中D的唯一值个数,而你需要的是每组的总行数,应使用n()函数。
正确代码:
sample %>% group_by(T, C) %>% mutate(count = n()) %>% ungroup() # 可选,若后续无需分组状态可取消分组
解释:分组后调用n(),会返回当前组的总行数,将其赋值给count列即可得到期望结果。之前得到全为5的结果,是因为整个数据集里D的唯一值共有5个(1、2、3、5、6),说明分组逻辑可能未正确生效(比如管道符书写错误),但核心问题是用错了统计函数。
内容的提问来源于stack exchange,提问作者janeluyip
相关产品推荐
相关产品推荐

