如何在R语言中用单行代码实现多值条件赋值?
在R中实现类似Stata recode的精简赋值方法
以下几种方法可以帮你把原本繁琐的多行赋值精简为更简洁的代码,效果类似Stata的recode命令:
1. 使用dplyr的recode函数(语法最接近Stata)
先加载dplyr包,直接通过键值对映射赋值,.default参数指定未匹配值的默认结果:
library(dplyr) # 直接赋值新列 ET.data$Q1_RUR <- recode(ET.data$Q1, `1` = 0.18831667304039, `2` = -0.118123181164265, .default = NA_real_) # 或者用管道语法更整洁 ET.data <- ET.data %>% mutate(Q1_RUR = recode(Q1, `1` = 0.18831667304039, `2` = -0.118123181164265, .default = NA_real_))
2. 使用base R的match函数(无需额外加载包)
通过匹配值的位置来映射得分,未匹配的位置会自动返回NA:
ET.data$Q1_RUR <- c(0.18831667304039, -0.118123181164265)[match(ET.data$Q1, c(1, 2))]
3. 使用base R的嵌套ifelse(适合简单条件场景)
如果只有少量条件,也可以用嵌套的ifelse写成单行:
ET.data$Q1_RUR <- ifelse(ET.data$Q1 == 1, 0.18831667304039, ifelse(ET.data$Q1 == 2, -0.118123181164265, NA))
内容的提问来源于stack exchange,提问作者Andrew Corley
相关产品推荐
相关产品推荐

