解压缩数据框列中的嵌入向量并将值传播到 R 中的多行
Unpack embedded vectors in columns of a data frame and spread the values to multiple rows in R
我有一个由这段代码创建的数据框:
df <- dplyr::data_frame(
id = c(1, 2, 3),
name = c('Jack', 'Peter', 'Sam'),
role = list(
c('Manager', 'Analyst'),
c('Analyst', 'Advisor'),
c('Analyst')
),
fav_color = list(
c('White', 'Blue'),
c('Black', 'Red'),
c('White', 'Red')
)
)
role
和 fav_color
列中的每一行都包含一个向量或字符,而不是单个字符串。我想像这样将值分散到单独的行中:
id name role fav_color
------------------------------
1 Jack Manager White
1 Jack Manager Blue
1 Jack Analyst White
1 Jack Analyst Blue
2 Peter Analyst Black
2 Peter Analyst Red
2 Peter Advisor Black
2 Peter Advisor Red
3 Sam Analyst White
3 Sam Analyst Red
我尝试了 purrr
和 tidyjson
,但仍然没有取得太大进展。
有人给我一些建议吗?非常感谢。
你可以用 dplyr
很容易地做到这一点
df %>% rowwise %>% do(expand.grid(., stringsAsFactors=FALSE))
# id name role fav_color
# * <dbl> <chr> <chr> <chr>
# 1 1 Jack Manager White
# 2 1 Jack Analyst White
# 3 1 Jack Manager Blue
# 4 1 Jack Analyst Blue
# 5 2 Peter Analyst Black
# 6 2 Peter Advisor Black
# 7 2 Peter Analyst Red
# 8 2 Peter Advisor Red
# 9 3 Sam Analyst White
# 10 3 Sam Analyst Red
这里我们使用基本函数expand.grid
来查找列表值的所有组合,
我有一个由这段代码创建的数据框:
df <- dplyr::data_frame(
id = c(1, 2, 3),
name = c('Jack', 'Peter', 'Sam'),
role = list(
c('Manager', 'Analyst'),
c('Analyst', 'Advisor'),
c('Analyst')
),
fav_color = list(
c('White', 'Blue'),
c('Black', 'Red'),
c('White', 'Red')
)
)
role
和 fav_color
列中的每一行都包含一个向量或字符,而不是单个字符串。我想像这样将值分散到单独的行中:
id name role fav_color
------------------------------
1 Jack Manager White
1 Jack Manager Blue
1 Jack Analyst White
1 Jack Analyst Blue
2 Peter Analyst Black
2 Peter Analyst Red
2 Peter Advisor Black
2 Peter Advisor Red
3 Sam Analyst White
3 Sam Analyst Red
我尝试了 purrr
和 tidyjson
,但仍然没有取得太大进展。
有人给我一些建议吗?非常感谢。
你可以用 dplyr
很容易地做到这一点
df %>% rowwise %>% do(expand.grid(., stringsAsFactors=FALSE))
# id name role fav_color
# * <dbl> <chr> <chr> <chr>
# 1 1 Jack Manager White
# 2 1 Jack Analyst White
# 3 1 Jack Manager Blue
# 4 1 Jack Analyst Blue
# 5 2 Peter Analyst Black
# 6 2 Peter Advisor Black
# 7 2 Peter Analyst Red
# 8 2 Peter Advisor Red
# 9 3 Sam Analyst White
# 10 3 Sam Analyst Red
这里我们使用基本函数expand.grid
来查找列表值的所有组合,