在R数据框每行新增列展示对应g类别非NA值计数
在R数据框中按组添加非NA值计数列
我来帮你搞定这个需求!你已经有了以下数据框:
g <- c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6) m <- c(1, NA, NA, NA, 3, NA, 2, 1, 3, NA, 3, NA, NA, 4, NA, NA, NA, 2, 1, NA, 7, 3, NA, 1) df <- data.frame(g, m)
并且已经通过代码统计出了每个g类别的非NA值数量:
df %>% group_by(g) %>% summarise(non_na_count = sum(!is.na(m)))
A tibble: 6 x 2g non_na_count
1 1 1
2 2 3
3 3 2
4 4 1
5 5 2
6 6 3
现在要把这个计数添加到原数据框对应类别的每一行,这里有两种简单的实现方法:
方法1:直接分组后新增列(一步到位)
利用dplyr的mutate函数,在分组状态下计算每组的非NA数量,直接添加到原数据框的每一行:
library(dplyr) df_with_count <- df %>% group_by(g) %>% mutate(non_na_count = sum(!is.na(m))) %>% ungroup() # 可选操作,取消数据框的分组状态
方法2:先统计再合并
如果你已经有了统计好的结果(就是你之前生成的汇总表),可以用left_join把它和原数据框按g列合并:
# 先保存你已经统计好的汇总结果 count_summary <- df %>% group_by(g) %>% summarise(non_na_count = sum(!is.na(m))) # 左连接合并到原数据框 df_with_count <- df %>% left_join(count_summary, by = "g")
两种方法得到的结果是一致的,每个g类别下的所有行都会显示该组对应的非NA值计数,比如g=1的4行都会显示non_na_count=1,g=2的4行都会显示non_na_count=3,以此类推。
内容的提问来源于stack exchange,提问作者Judith
相关产品推荐
相关产品推荐

