【发布时间】:2018-12-12 17:40:57
【问题描述】:
我有一个数据框 df,如下所述。
a <- c(1:6)
b <- c("Audi,BMW,Skoda, Rackets,Toy,Football",
"Suzuki,Kawasaki,Ducati,Aprilia,Baseball, Rugby",
"Mazda, Ford, chevrolet,Mercedes,Gloves,Helmet",
"Lemon,Yamaha,Table,Kawasaki,Chair,Fruits",
"Ford, chevrolet,Bread,Ducati,Tesla,Hyundai",
"Honey,Apple,Alcohol,cake,Sweets, Mango")
df <- data.frame(a,b)
*
我还有两个包含汽车和自行车品牌名称的列表。
cars <- c("Audi","BMW","Ford","Skoda","Mazda","chevrolet","Mercedes","Volkswagen","Tesla","Hyundai","Lamborghini","Mini-Cooper","Lexus")
motorbike <- c("Yamaha","Suzuki","Kawasaki","Harley-Davidson","Ducati","Aprilia","KTM", "Triumph","Piaggio","Hyosung","Vespa","MV-Agusta")
我使用 grepl 和 ifelse 来匹配 df$b 中两个列表中的单词,如果匹配,则为每行分配一个值。
df$c<-ifelse(grepl(paste(cars, collapse="|"), df$b), "cars",
ifelse(grepl(paste(motorbike, collapse="|"),df$b), "bikes","others"))
现在,我想设置一个条件,如果每行中有 4 个或超过 4 个单词匹配,则只有在 df$c 中分配一个值 (car,bike)。我希望我的 df 是这样的:
structure(list(a = 1:6, b = structure(c(1L, 6L, 5L, 4L, 2L, 3L
), .Label = c("Audi,BMW,Skoda, Rackets,Toy,Football", "Ford, chevrolet,Bread,Ducati,Tesla,Hyundai",
"Honey,Apple,Alcohol,cake,Sweets, Mango", "Lemon,Yamaha,Table,Kawasaki,Chair,Fruits",
"Mazda, Ford, chevrolet,Mercedes,Gloves,Helmet", "Suzuki,Kawasaki,Ducati,Aprilia,Baseball, Rugby"
), class = "factor"), c = c("others", "bikes", "cars", "others",
"cars", "others")), row.names = c(NA, 6L), class = "data.frame")
【问题讨论】:
标签: r if-statement string-matching grepl