简体   繁体   English

在数据帧的列中解压缩嵌入的向量,并将值分布到R中的多行

[英]Unpack embedded vectors in columns of a data frame and spread the values to multiple rows in R

I have a data frame created by this chunk of code: 我有一个由这段代码创建的数据框:

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')
    )
)

Each row in role and fav_color columns contain a vector or characters instead of a single string. rolefav_color列中的每一行都包含一个向量或字符,而不是单个字符串。 I want to spread the values into separate rows like this: 我想像这样将值分布到单独的行中:

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

I tried purrr and tidyjson but still didn't get very far. 我尝试了purrrtidyjson但仍然没有走得很远。 Anyone gives me some advice? 有人给我一些建议吗? much appreciated. 非常感激。

You can do this with dplyr fairly easily 您可以使用dplyr轻松完成此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

Here we use the base function expand.grid to find all combinations of the list values, 在这里,我们使用基本函数expand.grid查找列表值的所有组合,

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM