R语言中基于Time列值修改CA列的条件判断问题
基于Time列修改CA列的修正代码
需求规则回顾
- 若
Time非NA:原CA为2则保持2,其余改为1 - 若
Time为NA:原CA为2则保持2,其余改为0
基础R实现(嵌套ifelse)
用嵌套的ifelse语句直接修改CA列,逻辑完全匹配需求:
dfz <- data.frame( Time = c(200, 1000, 500, 800, 1200, 1300, 1500, NA, NA, NA), CA = c(rep(0,2),rep(1,2),rep(2,3),rep(0,3)), FO = c(rep(0,2),rep(1,2),rep(2,3),rep(0,3)) ) # 修正后的ifelse代码 dfz$CA <- ifelse(!is.na(dfz$Time), ifelse(dfz$CA == 2, 2, 1), ifelse(dfz$CA == 2, 2, 0)) # 查看结果 print(dfz)
运行后CA列结果为:1, 1, 1, 1, 2, 2, 2, 0, 0, 0,完全符合规则。
tidyverse风格实现(case_when)
如果习惯使用dplyr,case_when的语法更直观,可读性更强:
library(dplyr) dfz <- dfz %>% mutate(CA = case_when( !is.na(Time) & CA == 2 ~ 2, !is.na(Time) ~ 1, is.na(Time) & CA == 2 ~ 2, TRUE ~ 0 ))
逻辑说明
两种方法都是先判断Time是否为NA,再结合原CA的值执行对应修改:
- 优先保留原
CA=2的情况,避免被覆盖 - 针对
Time的两种状态,分别设置非2值的替换规则
内容的提问来源于stack exchange,提问作者Tierra Smith
相关产品推荐
相关产品推荐

