R语言中如何判断ID字符串包含1或2并生成对应新变量
R字符串匹配生成新变量问题修复
错误原因
你编写的代码使用%in%做完全值匹配,仅当ID列的整行内容完全等于数字1/2时才会触发匹配逻辑,但你的ID列是带前缀字母的字符串,无法命中匹配规则,因此全部返回NA。
修复方案
基础R实现
直接用grepl()函数做子串匹配即可:
Fixations$test <- ifelse(grepl("1", Fixations$ID), "1", ifelse(grepl("2", Fixations$ID), "2", NA))
grepl("模式", 待检测向量)会逐行检测向量中的元素是否包含指定子串,匹配返回TRUE,否则返回FALSE,刚好适配ifelse的判断条件- 如果存在ID同时包含1和2的情况,上述代码会优先返回"1",调整判断顺序即可修改优先级
tidyverse/dplyr实现(可选)
如果使用tidyverse生态,用case_when写多层判断逻辑更清晰,避免嵌套ifelse:
library(dplyr) Fixations <- Fixations %>% mutate(test = case_when( grepl("1", ID) ~ "1", grepl("2", ID) ~ "2", .default = NA_character_ ))
内容的提问来源于stack exchange,提问作者Quantizer
相关产品推荐
相关产品推荐

