如何解决在 R 中使用 SUBSTR/GREP 从列中提取字符串列表?
我知道之前有人问过这个问题,我一直在尝试根据我的情况调整逻辑,但我不确定我做错了什么。
我有一个数据框,我试图根据另一列中的元素是否有我正在搜索的字符串来创建一个新的 True/False 列。
cpt <- data.frame(value = c("62267","62268","62269"))
ex <- data.frame(code = c("2456","62267","6200","63001","62269"))
当 ex 中的一个字符串等于 cpt 中的一个字符串时,我想要一个 true。
我已经试过了:
cpt1 <- paste(cpt,collapse = '|')
setDT(ex)[,i4 := str_extract(ex$code,cpt)]
和
setDT(ex)[,i3 := sapply(cpt1,grepl,ex$code)]
和
setDT(ex)[,i2 := any(grep(cpt1,ex$code))]
但我的“i”列总是显示为 NULL。我想使用 data.table 包保留它,因为我在这段代码之后有链。我不确定我做错了什么?任何帮助/建议将不胜感激!
解决方法
我们需要从 vector
而不是 data.frame
创建模式,即提取列 'value' 和 paste
library(data.table)
library(stringr)
cpt1 <- paste(cpt$value,collapse = '|')
setDT(ex)[,i4 := str_extract(code,cpt1)]
ex[,i3 := sapply(cpt1,grepl,code)]
ex[,i2 := any(grepl(cpt1,code))]
-输出
ex
code i4 i3 i2
1: 2456 <NA> FALSE TRUE
2: 62267 62267 TRUE TRUE
3: 6200 <NA> FALSE TRUE
4: 62268 62268 TRUE TRUE
5: 63001 <NA> FALSE TRUE
6: 62269 62269 TRUE TRUE
,
TRUE/FALSE 列也可以使用 %chin%
包中的函数 data.table
生成。它主要检查其左侧的每个元素(字符串)是否出现在其右侧。
setDT(ex)[,i := code %chin% cpt$value]
# code i
# 1: 2456 FALSE
# 2: 62267 TRUE
# 3: 6200 FALSE
# 4: 62268 TRUE
# 5: 63001 FALSE
# 6: 62269 TRUE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。