【发布时间】:2015-08-31 13:16:29
【问题描述】:
我有一个数据框,其中包含一个名为 listA 的列和一个 listB。我只想提取数据框中与 listB 中的条目匹配的那些行,所以我有:
newData <- mydata[mydata$listA %in% listB,]
但是,listA 的某些条目的格式为“ABC /// DEF”,其中 ABC 和 DEF 都可能是 listB 中的条目。 我想提取具有 listA 的数据框的行,其中任何单词都与 listB 中的条目匹配。因此,如果 listB 中包含“ABC”,则该条目将包含在 newData 中。我找到了 strsplit 函数,但是像
strsplit(mydata$listA," ") %in% listB
总是返回 FALSE,大概是因为它正在检查 strsplit 返回的整个列表是否是 listB 中的一个条目。
【问题讨论】:
-
您解决此问题的尝试很不错,但您没有提供可重现的示例,也没有提供您想要的输出。
-
mydata[any(unlist(strsplit(mydata$listA, " /// ")) %in% listB), ]这样的东西怎么样? -
谢谢亚历克斯,这让我更接近了。现在的问题是,它评估的是整个 listA,而不是一次一行。 unlist(strsplit(mydata$listA, " /// ")) 返回整个列表中的所有单词,因此 any() 始终返回 TRUE。也许某种应用功能......
-
是的,我认为这是因为
unlist。另一种可能性是查看grepl,尽管它没有通过模式参数进行矢量化。 -
这可能过于复杂,但请尝试将
unlist(lapply(strsplit(mydata$listA, " /// "), function(x) any(x %in% listB)))作为行子集条件。
标签: r string match vectorization string-matching