df< - data.frame(ID = rep(“variable”,9), national_id = rep(-9999,times = 9), state_id = c(rep(-9999,times = 5),11,22,25,-9999), district_id …
正如@markus所提到的,这是一个很好的例子 case_when 在那里你可以有多个条件和输出这些条件。
case_when
library(tidyverse) df %>% mutate(d_value = case_when(str_detect(district_id, "^11") ~ d_value + 1, str_detect(district_id, "^22") ~ d_value + 0.6, state_id == 11 ~ d_value + 0.9, TRUE ~ d_value))
我们改变了价值 d_value 根据具体条件和 TRUE ~ d_value 我们保持 d_value 因为如果没有满足上述条件的话。
d_value
TRUE ~ d_value
看起来像一个子串(或RegEx)练习,基础R也可以处理。使用前2位数创建一个附加(辅助)列。这里是子串解决方案。
df$first_2_digits <- substr(x = df$district_id, start = 1, stop = 2)
然后是“正常”索引。
df[df$first_2_digits == 11, "d_value"] <- df[df$first_2_digits == 11, "d_value"] + 0.9
可轻松打包成功能,并可通过两位以上的组合和可能的“切换”功能进行扩展。