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

如何为每个ID添加当前非缺失var1条目计数列?

按ID累计统计非缺失条目(不删除行)

方法1:Base R 实现

利用ave()函数按ID分组处理,结合cumsum()累计计数,同时保留原NA行的空缺值:

data <- data.frame(id=c(1,1,1,1,2,2,2,3,3,3,3),var1=c(NA,2,5,3,NA,NA,6,4,4,NA,7))

data$count_nm <- ave(!is.na(data$var1), data$id, FUN = function(x) {
  # 计算非NA值的累计和
  cumulative <- cumsum(x)
  # 将原var1为NA的位置(对应x为FALSE)设为NA
  cumulative[!x] <- NA
  cumulative
})

运行后data的count_nm列将完全匹配预期结果。

方法2:dplyr 包实现

通过分组+条件判断的方式,更直观地完成需求:

library(dplyr)

data <- data.frame(id=c(1,1,1,1,2,2,2,3,3,3,3),var1=c(NA,2,5,3,NA,NA,6,4,4,NA,7))

data <- data %>%
  group_by(id) %>%
  mutate(count_nm = ifelse(is.na(var1), NA, cumsum(!is.na(var1)))) %>%
  ungroup()

逻辑说明:

  • 按id分组后,对每行判断var1是否为NA:
    • 若为NA,count_nm直接设为NA
    • 若不为NA,计算从组内第一行到当前行的非NA值累计数量

内容的提问来源于stack exchange,提问作者Ronald Carlos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:33:14