我的问题是双重的。我想根据不同的值过滤数据帧df中的一列。我的专栏由许多不同的汽车类型组成。例如,如果我要寻找宝马3er系,我也想包括宝马3er系。3161 SEDAN。
Example dataset:
Item Brand Type
1 BMW 3er Reihe
2 BMW 3er Reihe; 3161 SEDAN
3 Audi A1
4 Audi A3
我用grep做到了这一点:
carsegmentC <- df[grep("3er Reihe|A3", df$Type), ]
这可以很好地工作,并且完全按照我希望的方式过滤数据帧,但是这对我的问题的下一部分提出了更多的困难。最终,我想将过滤后的输出放到新列中,然后放回到数据框中。所以它看起来像这样:
Item Brand Type Carsegment C Carsegment B
1 BWM 3er Reihe 3er Reihe
2 BMW 3er reihe; 3161 SEDAN 3er reihe; 3161 SEDAN
3 Audi A1 A1
4 Audi A3 A3
这似乎不适用于grep,并且我尝试了其他操作,例如复制列,但不起作用。希望任何人都能提供帮助,我将不胜感激!
可重现的示例:
df <- data.frame(Item = c(1,2,3,4), Brand=c("BMW", "BMW", "Audi", "Audi"), Type=c("3er Reihe", "3er Reihe;3161 SEDAN ", "A1", "A3"))
将这些模式放在中list
,在模式之间循环,应用grepl
以获取逻辑索引,将其包装起来ifelse
以返回""
FALSE值,grepl
并将其分配给'df'中的新列。
df[c("CarsegmentC", "CarsegmentB")] <- lapply(list("3er Reihe|A3", "A1"),
function(pat) ifelse(grepl(pat, df$Type), df$Type, ""))
df
# Item Brand Type CarsegmentC CarsegmentB
#1 1 BMW 3er Reihe 3er Reihe
#2 2 BMW 3er Reihe;3161 SEDAN 3er Reihe;3161 SEDAN
#3 3 Audi A1 A1
#4 4 Audi A3 A3
df <- data.frame(Item = c(1,2,3,4), Brand=c("BMW", "BMW", "Audi",
"Audi"), Type=c("3er Reihe", "3er Reihe;3161 SEDAN", "A1", "A3"),
stringsAsFactors=FALSE)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句