使列表变量值匹配的变异列

时间:2018-05-10 15:48:45

标签: r list dplyr mutate

我想在数据框中创建一个与列表变量中的值对应的新列。

我的数据框包含许多带有“产品名称”列的行。我的目的是创建一个新列,允许我将产品分类。

示例代码 -

library(dplyr)

products <- c('Apple', 'orange', 'pear',
          'carrot', 'cabbage',
          'strawberry', 'blueberry')
df <- data.frame(products)

ls <- list(Fruit = c('Apple', 'orange', 'pear'),
       Veg = c('carrot', 'cabbage'),
       Berry = c('strawberry', 'blueberry'))

test <- df %>%
  mutate(category = products %in% ls)

我希望这能说明我正在做的事情。通过创建列表,我基本上得到了产品及其类别的注册,这些注册可能会随着时间的推移而发生变化。

使用清单是否有解决方案,或者我是否过于复杂而没有看到树木?

编辑 - 可能有助于让您知道我正在使用100种产品。

1 个答案:

答案 0 :(得分:4)

stack列表然后加入数据框:

df %>% 
    left_join(stack(ls), by = c('products' = 'values')) %>% 
    rename(category = ind)

#    products category
#1      Apple    Fruit
#2     orange    Fruit
#3       pear    Fruit
#4     carrot      Veg
#5    cabbage      Veg
#6 strawberry    Berry
#7  blueberry    Berry