R-将列值拆分为新的多列

R-将列值拆分为新的多列,r,dataframe,R,Dataframe,我有一个数据帧,格式如下: id products 1001 milk, cheese, sugar 1002 milk 1003 cheese, eggs 我想将其更改为新的数据框,格式如下: id product1 product2 product3 1001 milk cheese sugar 1002 milk 1003 cheese

我有一个数据帧,格式如下:

    id          products
   1001     milk, cheese, sugar
   1002     milk
   1003     cheese, eggs
我想将其更改为新的数据框,格式如下:

id     product1    product2     product3
1001    milk        cheese        sugar
1002    milk        
1003    cheese       egg    

如何在R中实现这一点?

我们可以使用
单独的

library(dplyr)
library(tidyr)
df1 %>%
   separate(products, into = paste0('product', 1:3),
        sep=",\\s+", extra = "merge")  
#   id product1 product2 product3
#1 1001     milk   cheese    sugar
#2 1002     milk     <NA>     <NA>
#3 1003   cheese     eggs     <NA>
数据
df1假设我们的数据帧中有不确定数量的产品(超过三个)。我们可以使用
separate_rows()。这里是您共享数据的代码(我添加了更多项目以查看此方法)。代码如下:

library(tidyverse)
#Data
df <- structure(list(id = c(1001, 1002, 1003), products = c("milk, cheese, sugar, rice, soap, water", 
"milk", "cheese, eggs")), row.names = c(NA, -3L), class = "data.frame")
输出:

# A tibble: 3 x 7
# Groups:   id [3]
     id V1     V2       V3      V4     V5     V6     
  <dbl> <chr>  <chr>    <chr>   <chr>  <chr>  <chr>  
1  1001 milk   "cheese" "sugar" "rice" "soap" "water"
2  1002 milk   ""       ""      ""     ""     ""     
3  1003 cheese "eggs"   ""      ""     ""     ""     
#一个tible:3 x 7
#组别:id[3]
id V1 V2 V3 V4 V5 V6
1001牛奶“奶酪”“糖”“大米”“肥皂”“水”
21002牛奶“
31003个奶酪“蛋”
library(tidyverse)
#Data
df <- structure(list(id = c(1001, 1002, 1003), products = c("milk, cheese, sugar, rice, soap, water", 
"milk", "cheese, eggs")), row.names = c(NA, -3L), class = "data.frame")
#Code
df %>% separate_rows(products,sep = ', ') %>%
  group_by(id) %>%
  mutate(Var=paste0('V',1:n())) %>%
  pivot_wider(names_from = Var,values_from=products) %>%
  replace(is.na(.),'')
# A tibble: 3 x 7
# Groups:   id [3]
     id V1     V2       V3      V4     V5     V6     
  <dbl> <chr>  <chr>    <chr>   <chr>  <chr>  <chr>  
1  1001 milk   "cheese" "sugar" "rice" "soap" "water"
2  1002 milk   ""       ""      ""     ""     ""     
3  1003 cheese "eggs"   ""      ""     ""     ""