我有以下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))
df <- structure(list(id = 1:2, name = c("Pete", "Anna"), shoes = c("nike; adidas; puma",
"nike")), class = "data.frame", row.names = c(NA, -2L))