R语言:基于两列值创建Coins/Copay新列的技术问询
在R中按多条件生成Coins/Copay列
我帮你梳理了需求,并用R的dplyr包(处理数据超顺手的工具)来实现这个逻辑,代码清晰易懂,每个条件都对应明确的分支:
先明确需求条件
- 计划A、B、C:存在Coins数值但Copay为NA → Coins/Copay=1
- 计划D、E:存在Copay数值但Coins为NA → Coins/Copay=0
- 计划F:Coins和Copay均为0 → Coins/Copay=0
- 计划G、H:Coins和Copay均有数值且Copay≠0 → Coins/Copay=0
- 计划I、J:Coins>Copay且Copay=0 → Coins/Copay=1
实现代码
首先确保你安装了dplyr包(没装的话先跑install.packages("dplyr")),然后用以下代码:
library(dplyr) # 示例数据集(和你给出的结构一致) df <- tibble( Plans = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "A"), Coins = c(0, 5, 10, NA, NA, 0, 3, 7, 15, 20, NA), Copay = c(NA, NA, NA, 20, 15, 0, 5, 10, 0, 0, 5) ) # 新增Coins/Copay列并按条件赋值 df <- df %>% mutate( `Coins/Copay` = case_when( # 条件1:A/B/C,Coins存在(非NA)且Copay为NA Plans %in% c("A", "B", "C") & !is.na(Coins) & is.na(Copay) ~ 1, # 条件2:D/E,Copay存在且Coins为NA Plans %in% c("D", "E") & !is.na(Copay) & is.na(Coins) ~ 0, # 条件3:F,Coins和Copay都是0 Plans == "F" & Coins == 0 & Copay == 0 ~ 0, # 条件4:G/H,两者都有值且Copay≠0 Plans %in% c("G", "H") & !is.na(Coins) & !is.na(Copay) & Copay != 0 ~ 0, # 条件5:I/J,Coins>Copay且Copay=0 Plans %in% c("I", "J") & Coins > Copay & Copay == 0 ~ 1, # 处理其他未覆盖的情况(如果有的话,这里设为NA,你可以根据需求调整) TRUE ~ NA_real_ ) ) # 查看结果 print(df)
代码解释
- 用
case_when()来处理多条件分支,每个条件对应一个赋值,逻辑清晰不混乱 - 每个条件都严格对应你给出的规则,比如
Plans %in% c("A", "B", "C")就是匹配指定计划,!is.na(Coins)判断Coins有数值,is.na(Copay)判断Copay为缺失值 - 最后加了
TRUE ~ NA_real_来处理所有没覆盖到的边缘情况,避免出现错误,你可以根据实际数据调整这个默认值
运行示例的输出结果
# A tibble: 11 × 4 Plans Coins Copay `Coins/Copay` <chr> <dbl> <dbl> <dbl> 1 A 0 NA 1 2 B 5 NA 1 3 C 10 NA 1 4 D NA 20 0 5 E NA 15 0 6 F 0 0 0 7 G 3 5 0 8 H 7 10 0 9 I 15 0 1 10 J 20 0 1 11 A NA 5 NA
你可以把自己的真实数据集替换掉示例中的df,直接运行就能得到想要的结果啦~
内容的提问来源于stack exchange,提问作者user9561908
相关产品推荐
相关产品推荐

