如何为每个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值累计数量
- 若为NA,
内容的提问来源于stack exchange,提问作者Ronald Carlos
相关产品推荐
相关产品推荐

