You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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 2
g 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:10:09