R 根据来自另一个 table 的搜索字符串更新 table 列
R update table column based on search string from another table
我正在尝试根据 table 中单元格 A 的值更新 table 中的单元格 B。为了过滤我要更新的行,我使用 grepl 将单元格 A 与来自 list/table/vector 或其他一些外部源的字符串列表进行比较。对于单元格 A 与搜索条件匹配的所有行,我想将单元格 B 更新为 "xxxx"。我需要对 table.
中的所有行执行此操作
到目前为止,我有这样的东西,其中 cat1 是某种列表,其中包含要搜索的字符串。
for (x in 1:length(cat1)){
data %<>% mutate(Cat = ifelse(grepl(cat1[i],ItemName),"xxx",Cat))
}
我愿意接受任何更好的方法来完成此任务。我已经尝试使用数据帧进行循环,并且愿意接受 data.table 解决方案。
谢谢。
使用以下代码假设您有一个名为 "data" 的数据框,其中包含列 "A" 和 "B" 并且 "cat1" 是所需字符串的向量,如上所述
library(data.table)
setDT(data)
data[A %in% cat1,B:="XXXX"]
为了避免循环,您可以使用 |
折叠字符向量,然后将其用作 grepl
中的单个模式,例如您可以尝试:
cat1_collapsed <- paste(cat1, collapse = "|")
data %>% mutate(Cat = ifelse(grepl(cat1_collapsed, ItemName),"xxx", Cat))
或使用 data.table(当然是基数 R)的等价物。
我正在尝试根据 table 中单元格 A 的值更新 table 中的单元格 B。为了过滤我要更新的行,我使用 grepl 将单元格 A 与来自 list/table/vector 或其他一些外部源的字符串列表进行比较。对于单元格 A 与搜索条件匹配的所有行,我想将单元格 B 更新为 "xxxx"。我需要对 table.
中的所有行执行此操作到目前为止,我有这样的东西,其中 cat1 是某种列表,其中包含要搜索的字符串。
for (x in 1:length(cat1)){
data %<>% mutate(Cat = ifelse(grepl(cat1[i],ItemName),"xxx",Cat))
}
我愿意接受任何更好的方法来完成此任务。我已经尝试使用数据帧进行循环,并且愿意接受 data.table 解决方案。
谢谢。
使用以下代码假设您有一个名为 "data" 的数据框,其中包含列 "A" 和 "B" 并且 "cat1" 是所需字符串的向量,如上所述
library(data.table)
setDT(data)
data[A %in% cat1,B:="XXXX"]
为了避免循环,您可以使用 |
折叠字符向量,然后将其用作 grepl
中的单个模式,例如您可以尝试:
cat1_collapsed <- paste(cat1, collapse = "|")
data %>% mutate(Cat = ifelse(grepl(cat1_collapsed, ItemName),"xxx", Cat))
或使用 data.table(当然是基数 R)的等价物。