我正在尝试根据同一个表中单元格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解决方案。
谢谢。
答案 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)。