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" "" "" "" ""