子集数据框并将项目放在R的新列中

薇拉

我的问题是双重的。我想根据不同的值过滤数据帧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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章