r - 如何获取列表列中包含元素的行

标签 r data.table stringi

我有一个数据表如下:

library(data.table)

dt <- data.table(
  id = c(1:3),
  string = list(c("tree", "house", "star"),  
                c("house", "tree", "dense forest"), 
                c("apple", "orange", "grapes"))
  )

由此我想获得列表字符串列中包含“树”的行。 所以我尝试了

dt["tree" %in% string]
Empty data.table (0 rows) of 2 cols: id,string


dt["tree" %in% unlist(string)]
   id                  string
1:  1         tree,house,star
2:  2 house,tree,dense forest
3:  3     apple,orange,grapes

我不确定我做错了哪一部分。我只需要返回 id 1 和 2。感谢任何帮助。

最佳答案

或者只是

library(data.table)
dt[grep("\\btree\\b", string)]

   id                  string
1:  1         tree,house,star
2:  2 house,tree,dense forest

看起来你的方法有什么问题是 %in% 对列表不起作用

"tree" %in% dt$string[1]
[1] FALSE

grep()grepl() 接受它可以强制转换为字符向量的所有内容

grepl("tree", dt$string[1])
[1] TRUE

as.character(dt$string[1])
[1] "c(\"tree\", \"house\", \"star\")"

这意味着它还会将其他单词与 IF 中的 tree 匹配为 @RonakShah 提醒我你不要使用单词边界 \b

关于r - 如何获取列表列中包含元素的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58317646/

相关文章:

regex - R/regex with stringi/ICU : why is a '+' considered a non-[:punct:] character?

sql - 如何给 dplyr 一个 SQL 查询并让它返回一个远程 tbl 对象?

r - 如何控制 RMarkdown/knitr 加载的默认包以避免选项冲突

删除残差图中的 xlab(fit,which = 1)

R - 在 data.table 中使用 glm

r - 在 data.table 中查找向量中的所有匹配项

r - 将编码应用于整个数据表

r - 如何从存档安装 stringi 库并安装本地 icu52l.zip

r - 在不使用 coord_flip() 的情况下在 R 中绘制翻转的正态分布

删除非 ASCII 值然后降低文本会出错