R更新表列基于来自另一个表的搜索字符串

时间:2015-04-16 21:12:05

标签: r dataframe data.table dplyr

我正在尝试根据同一个表中单元格A的值更新表格中的单元格B.要过滤我想要更新的行,我使用grepl将单元格A与列表/表格/向量或其他外部源中的字符串列表进行比较。对于单元格A与搜索条件匹配的所有行,我想更新单元格B以说明" xxxx"。我需要为表格中的所有行执行此操作。

到目前为止,我有类似这样的东西,其中cat1是某种类型的列表,其中包含要搜索的字符串。

for (x in 1:length(cat1)){ 
  data %<>% mutate(Cat = ifelse(grepl(cat1[i],ItemName),"xxx",Cat))
}

我愿意接受任何更好的方法来实现这一目标。我尝试过使用数据框的循环,并且我可以使用data.table解决方案。

谢谢。

2 个答案:

答案 0 :(得分:2)

使用以下代码,假设您有一个名为&#34; data&#34;的数据框。列#34; A&#34;和&#34; B&#34;那&#34; cat1&#34;是所需字符串的向量,如上所述

library(data.table)
setDT(data)
data[A %in% cat1,B:="XXXX"]

答案 1 :(得分:2)

要避免循环,您可以使用|折叠字符向量,然后将其用作grepl中的单个模式,例如,您可以尝试:

cat1_collapsed <- paste(cat1, collapse = "|")
data %>% mutate(Cat = ifelse(grepl(cat1_collapsed, ItemName),"xxx", Cat))

或等效使用data.table(当然还有基数R)。