【问题标题】:unnest_auto and unnest_longer to unnest multiple columnsunnest_auto 和 unnest_longer 取消嵌套多个列
【发布时间】:2019-07-11 11:49:23
【问题描述】:

我有一个要取消嵌套的嵌套数据框。这是一个假的结构示例。

df <- structure(list(`_id` = c("a", "b", "c", "d"), 
                     variable = list(structure(list(type = c("u", "a", "u", "a", "u", "a", "a"), 
                                                    m_ = c("m1",
                                                           "m2",
                                                           "m3",
                                                           "m4",
                                                           "m5",
                                                           "m6", "m7"), #omitted from original example by mistake 
                                                    t_ = c("2015-07-21 4:13 PM", 
                                                           "2016-04-21 7:25 PM", 
                                                           "2017-10-04 9:49 PM", 
                                                           "2018-12-04 12:29 PM", 
                                                           "2019-04-20 20:20 AM", 
                                                           "2016-05-20 12:00 AM", 
                                                           "2016-06-20 12:00 AM"), 
                                                    a_ = c(NA, 
                                                           "", 
                                                           NA, 
                                                           "", 
                                                           NA, 
                                                           "C", 
                                                           "C")), 
                                               class = "data.frame", 
                                               row.names = c(NA, 7L)), 
                                     structure(list(type = c("u", "a"), 
                                                    m_ = c("m1",
                                                           "m2"), 
                                                    t_ = c("2018-05-24 12:08 AM", 
                                                           "2019-04-24 3:05 PM"), 
                                                    a_ = c(NA, "")), 
                                               class = "data.frame", 
                                               row.names = 1:2), 
                                     structure(list(type = "u", 
                                                    m_ = "m1", 
                                                    t_ = "2018-02-17 3:14 PM"), 
                                               class = "data.frame", 
                                               row.names = 1L), 
                                     structure(list(type = "u", 
                                                    m_ = "m1",
                                                    t_ = "2016-05-27 5:14 PM",
                                                    b_ = "b1", 
                                                    i_ = "i1", 
                                                    e_ = structure(list(), 
                                                                   .Names = character(0), 
                                                                   class = "data.frame", 
                                                                   row.names = c(NA, -1L)), 
                                                    l_ = "l1"), 
                                               class = "data.frame", 
                                               row.names = 1L)),
                     myDate = structure(c(1521503311.992, 
                                          1521514011.161, 
                                          1551699584.65, 
                                          1553632693.94), 
                                        class = c("POSIXct", "POSIXt"))), 
                row.names = c(1L, 2L, 3L, 4L), 
                class = "data.frame")
View(df)

variable 是长度不同的数据帧列表(本示例中最大字段为 7,但可以随时间扩展)。

我尝试使用tidyr 的开发版本来利用新的unnest_auto() 功能。

# devtools::install_github("tidyverse/tidyr")
df2 <- unnest_auto(df, variable)
View(df2)

如果我在结果上使用 unnest_longer 并指定一列,例如 type,我会扩展它。

df3 <- unnest_longer(df2, type)

我没有看到 unnest_longer() 处理多列的任何参数。有更好的方法吗?

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    这似乎有效:

    df %>% unnest_auto(variable) %>% unnest()
    
    #Warning message:
    #`cols` is now required.
    #Please use `cols = c(type, m_, t_, a_, e_)`
    
    df %>% unnest_auto(variable) %>% unnest(cols = c(type, m_, t_, a_, e_, l_))
    
    # A tibble: 11 x 10
       `_id` type  m_    t_     a_    b_    i_    e_    l_    myDate             
       <chr> <chr> <chr> <chr>  <chr> <chr> <chr> <???> <chr> <dttm>             
     1 a     u     m1    2015-… NA    NA    NA    NA    NA    2018-03-20 02:48:31
     2 a     a     m2    2016-… ""    NA    NA    NA    NA    2018-03-20 02:48:31
     3 a     u     m3    2017-… NA    NA    NA    NA    NA    2018-03-20 02:48:31
     4 a     a     m4    2018-… ""    NA    NA    NA    NA    2018-03-20 02:48:31
     5 a     u     m5    2019-… NA    NA    NA    NA    NA    2018-03-20 02:48:31
     6 a     a     m6    2016-… C     NA    NA    NA    NA    2018-03-20 02:48:31
     7 a     a     m7    2016-… C     NA    NA    NA    NA    2018-03-20 02:48:31
     8 b     u     m1    2018-… NA    NA    NA    NA    NA    2018-03-20 05:46:51
     9 b     a     m2    2019-… ""    NA    NA    NA    NA    2018-03-20 05:46:51
    10 c     u     m1    2018-… NA    NA    NA    NA    NA    2019-03-04 14:39:44
    11 d     u     m1    2016-… NA    b1    i1    NA    l1    2019-03-26 23:38:13
    

    【讨论】:

      猜你喜欢
      • 2023-02-06
      • 2022-01-10
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2019-08-07
      • 2021-10-01
      相关资源
      最近更新 更多