我有一个数据框,其中包含一个名为listA的列和一个listB。我想只拉出数据框中与listB中的条目匹配的那些行,所以我有:
newData <- mydata[mydata$listA %in% listB,]
但是,listA的某些条目的格式为&#34; ABC /// DEF&#34 ;,其中ABC和DEF都是listB中的可能条目。 我想拉出数据框的行,这些行具有listA,其中任何单词与listB中的条目匹配。所以如果listB有&#34; ABC&#34;在其中,该条目将包含在newData中。我找到了strsplit函数,但是像
这样的东西strsplit(mydata$listA," ") %in% listB
总是返回FALSE,大概是因为它检查strsplit返回的整个列表是否是listB中的一个条目。
答案 0 :(得分:4)
match(word_vector, target_vector)
允许两个参数都是向量,这是你想要的(注意:那是向量,而不是列表)。事实上,%in%
运算符是match()
的同义词,正如其帮助告诉您的那样。stringi
包的方法stri_match_*
可能会直接执行您想要的操作,所有操作都会进行矢量化,并且比match()
或strsplit()
更高效:
stri_match_all stri_match_all_regex stri_match_first stri_match_first_regex stri_match_last stri_match_last_regex
此外,您可能不需要使用显式拆分功能,但如果必须,则使用stringi::stri_split_*()
,避免使用base::strsplit()
关于性能的注意事项:尽可能避免像R中的瘟疫一样分裂字符串,它会通过不必要的conscells创建内存泄漏,因为gc()
会告诉你。这是stringi
效率非常高的另一个原因。