【发布时间】:2021-10-13 23:58:47
【问题描述】:
我正在尝试使用 my_list 和数据框 (df) 查找匹配的字符串,并且取决于 TRUE/FALSE,我需要使用匹配列表中的第一个字符串填充 df 中的 new_name 列 (my_list[[i]][1])如果为 TRUE ,则为“cat”列值,如果不匹配。
我的数据框如下:
name <- c("NETFLIX.COM", "BlueTV", "smv", "trafi", "alkatel")
cat<- c("none", "none", "none", "transportation", "communication")
df<-data.frame(name, cat)
我的清单:
travel<- c("travel","air_com", "AIRCAT", "tivago")
leasure<- c("leasure","MTV", "NETFLIX.COM")
my_list<- list(travel, leasure)
我的 ifelse 和 grepl for 循环如下:
for (j in 1:nrow(df)) {
for (i in 1:length(my_list)) {
df[j, "new_name"]<- ifelse(
grepl(paste(my_list[[i]], collapse="|"), tolower(df[j, "name"])),
my_list[[i]][1],
df[j, "cat"])
预期输出是:
df["new_name"]<- c("leasure", "none", "none", "transportation", "communication")
df
name cat new_name
1 NETFLIX.COM none leasure
2 BlueTV none none
3 smv none none
4 trafi transportation transportation
5 alkatel communication communication
目前,通过我编写的 for 循环,我获得了“cat”列的精确副本,这意味着所有情况在 ifelse 函数中都被视为不匹配 (FALSE)。我注意到这里出了什么问题...... 任何帮助将不胜感激!
【问题讨论】:
-
在该循环中使用
ifelse()没有意义。使用if语句进行流量控制。ifelse()用于矢量化选择。
标签: r for-loop if-statement grepl