【问题标题】:Tranform Dataframe of lists to long format将列表的数据框转换为长格式
【发布时间】:2021-08-15 10:00:40
【问题描述】:

问题:

我有一个看起来像这样的 tibble/dataframe:

x <- c("Item A", "Item B", "Item C")
y <- c("Item D", "Item E", "Item F")
z <- c("Item G", "Item H")
my_list <- list(x, y, z)

Name<-c("Name 1","Name 2", "Name 3")

Df<-as_tibble(cbind(Name,I(my_list)))

我想将 tibble 转换为如下所示的长格式。

| Rnum  |  Name     |  Item     |
|:----: |:------:   |:------:   |
|   1   | Name 1    | Item A    |
|   1   | Name 1    | Item B    |
|   1   | Name 1    | Item C    |
|   2   | Name 2    | Item D    |
|   2   | Name 2    | Item E    |
|   2   | Name 2    | Item F    |
|   3   | Name 3    | Item G    |
|   3   | Name 3    | Item H    |

我已经尝试了所有我能想到但无法弄清楚的事情。我将不胜感激。

【问题讨论】:

    标签: r list


    【解决方案1】:

    您可以使用unnest 将列表放入数据框中的单独行中。

    library(dplyr)
    library(tidyr)
    
    Df %>%
      unnest(c(Name, V2)) %>%
      mutate(Rnum = match(Name, unique(Name)), .before = 1)
    
    #   Rnum Name   V2    
    #  <int> <chr>  <chr> 
    #1     1 Name 1 Item A
    #2     1 Name 1 Item B
    #3     1 Name 1 Item C
    #4     2 Name 2 Item D
    #5     2 Name 2 Item E
    #6     2 Name 2 Item F
    #7     3 Name 3 Item G
    #8     3 Name 3 Item H
    

    【讨论】:

      【解决方案2】:

      我们可以使用

      library(dplyr)
      library(tidyr)
      Df %>% 
          mutate(Rnum = row_number()) %>% 
          unnest(my_list)
      # A tibble: 8 x 3
        Name   my_list  Rnum
        <chr>  <chr>   <int>
      1 Name 1 Item A      1
      2 Name 1 Item B      1
      3 Name 1 Item C      1
      4 Name 2 Item D      2
      5 Name 2 Item E      2
      6 Name 2 Item F      2
      7 Name 3 Item G      3
      8 Name 3 Item H      3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-18
        • 2020-02-13
        • 2021-09-28
        • 2019-07-10
        • 1970-01-01
        • 2016-02-08
        • 1970-01-01
        • 2022-01-15
        相关资源
        最近更新 更多