微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 R 中使用 SUBSTR/GREP 从列中提取字符串列表?

如何解决在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?