查找数据表中的原始数据是否包含至少一个列表中的单词。

问题描述 投票:0回答:2

我对R和数据表很陌生,所以可能我的问题听起来很明显,但我在这里搜索了类似的问题,无论如何都找不到解决方案。

所以,最初,我有一个数据表,其中一行包含有许多值(事实上这些值都是独立的单词)的数据的字段,由&&&&连接在一起。我还有一个单词列表(list)。这个列表很大,有38000个不同的单词。但是为了举例的目的,我们假设它很小。

list <- c('word1', 'word2, 'word3')

我需要的是对数据表进行过滤,使我只有从单词列表中至少包含一个单词的行。

我通过&&&&&&&&&&&&&&&&&&&&&&&&&&&创建一个列表

fields_with_words <-strsplit(data_final$fields_with_words,"&&&&")

但是我不知道应该用哪个函数来检查我的数据表中的行是否至少有一个单词。你能给我一些线索吗?

r datatable
2个回答
1
投票

试试 。

data_final[sapply(strsplit(data_final$fields_with_words,"&&&&"), function(x) 
                  any(x %in% word_list)), ]

我已经使用了 word_list 而不是 list 这里自 list 是R中的一个内置函数。


1
投票

假设你想扫描 x 中的变量 df 附带 lw <- c("word1","word2","word3") 的向量,可以使用

df[grepl(paste0("(",paste(lw, collapse = "|"), ")"), x)]

如果你想使用正则表达式。特别是如果你的单词在一个句子中,你也需要匹配。然而,对于38K的单词,我不知道这个解决方案是否可以扩展。

如果你的 x 列中只包含单词,而你又想完全匹配,问题就简单了。你可以这样做。

df[any(x %chin% lw)]

%chin% 是一个 data.table 特殊 %in% 字符向量的运算符 (%in% 也可以使用,但性能不高)。) 如果您使用 merge 变为 lw 变成 data.table:

merge(df, data.table(x = lw), by = "x")
© www.soinside.com 2019 - 2024. All rights reserved.