在R语言中为数据框添加条件计数新列
解决方案
首先加载dplyr包(未安装的话先运行install.packages("dplyr")),用以下代码即可实现需求:
library(dplyr) # 原始数据 df <- structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), form = c("test", "test", "missing", "test", "test", "missing", "test", "test", "test", "missing")), row.names = c(NA, 10L), class = "data.frame") # 添加目标列 df <- df %>% group_by(id) %>% mutate(form_completed = ifelse(form == "missing", NA_integer_, cumsum(form == "test"))) %>% ungroup() # 查看结果 df
代码说明
group_by(id):按id分组,保证每个id内部独立计数cumsum(form == "test"):对分组内每行判断form是否为"test"(是则返回1,否则0),累加该值得到连续计数ifelse(form == "missing", NA_integer_, ...):将form为"missing"的行对应计数替换为NA,用NA_integer_确保列类型为整数,和期望输出一致
运行后得到的结果与你给出的期望输出完全匹配:
| id | form | form_completed |
|---|---|---|
| 1 | test | 1 |
| 1 | test | 2 |
| 1 | missing | NA |
| 1 | test | 3 |
| 2 | test | 1 |
| 2 | missing | NA |
| 2 | test | 2 |
| 3 | test | 1 |
| 3 | test | 2 |
| 3 | missing | NA |
内容的提问来源于stack exchange,提问作者fhr
相关产品推荐
相关产品推荐

