如何根据单元格中的值在R数据框架中创建新行?



我有以下data.frame:

id name shoes
1  Pete "nike; adidas; puma"
2  Anna nike

基于这个数据帧,我想创建如下的data.frame

id name shoes
1 Pete  nike
1 Pete  adidas
1 Pete  puma
2 Ana   nike

如有任何帮助,不胜感激。

separate_rows函数是完美的。默认情况下,它将在遇到非字母数字字符时分隔字符串,在您的示例中包括;

library(tidyverse)
df <- data.frame(name = c('Pete', 'Anna'), shoes = c('nike; adidas; puma', 'nike'))
df_long <- df %>% 
separate_rows(shoes)
name  shoes 
<chr> <chr> 
1 Pete  nike  
2 Pete  adidas
3 Pete  puma  
4 Anna  nike 

unnest代替strsplit

library(dplyr)
library(tidyr)
df %>% 
mutate(shoes = strsplit(shoes, "; ")) %>% 
unnest(shoes)
# A tibble: 4 × 3
id name  shoes
<int> <chr> <chr>
1     1 Pete  nike
2     1 Pete  adidas
3     1 Pete  puma
4     2 Anna  nike

df <- structure(list(id = 1:2, name = c("Pete", "Anna"), shoes = c("nike; adidas; puma",
"nike")), class = "data.frame", row.names = c(NA, -2L))

最新更新