dpplyr教程:如何检查一个变量的值是否包含在另一个变量中
解决方案
你的核心问题是误用了get()函数——它是用来获取变量名对应的对象,而非提取数据框列中的字符串值。直接用state_name列本身作为匹配模式即可,下面提供几种可行的实现方式:
方法1:用tidyverse生态的stringr::str_detect(推荐)
结合rowwise()让dplyr逐行处理,str_detect可以直接接收每行的state_name作为匹配规则:
library(dplyr) library(stringr) df2 <- df %>% rowwise() %>% mutate(type_state = ifelse(str_detect(jurisd_name, state_name), 1, 0)) %>% ungroup()
处理完记得用ungroup()取消逐行分组状态,避免影响后续数据操作。
方法2:用base R的mapply实现逐元素匹配
mapply会把state_name和jurisd_name的对应元素配对传入grepl,正好满足逐行匹配的需求:
df2 <- df %>% mutate(type_state = as.integer(mapply(grepl, pattern = state_name, x = jurisd_name)))
as.integer()将grepl返回的逻辑值(TRUE/FALSE)转换为1/0。
方法3:用Vectorize包装grepl
把原本不支持逐元素配对的grepl转成支持向量化输入的函数:
vec_grepl <- Vectorize(grepl) df2 <- df %>% mutate(type_state = as.integer(vec_grepl(state_name, jurisd_name)))
内容的提问来源于stack exchange,提问作者David Lilley
相关产品推荐
相关产品推荐

