【问题标题】:Unnest a list-column of tibbles with different data type (cannot combine double and character)取消嵌套具有不同数据类型的小标题列表列(不能组合双精度和字符)
【发布时间】:2021-11-03 14:05:51
【问题描述】:

我想取消嵌套嵌套的 tibble,但是出现错误。

示例数据:

library(tidyverse)

df <- tribble(
  ~x, ~y,
  1,  tibble(a=1,   b=2),
  2,  tibble(a=4:5, b=c("thank","you"),c=1:2))

df
#> # A tibble: 2 x 2
#>       x y               
#>   <dbl> <list>          
#> 1     1 <tibble [1 x 2]>
#> 2     2 <tibble [2 x 3]>

df %>% unnest(y)
#> Error: Can't combine `..1$b` <double> and `..2$b` <character>.

reprex package 创建于 2021-11-03 (v2.0.1)

我认为我必须将 y 中列出的所有 tibbles 的数据类型更改为字符,但我被困住了。

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    也许是以下?

    library(tidyverse)
    
    df <- tribble(
      ~x, ~y,
      1,  tibble(a=1,   b=2),
      2,  tibble(a=4:5, b=c("thank","you"),c=1:2))
    
    df %>% 
      mutate(y = map(y, ~ mutate(.x, b = as.character(b)))) %>%
      unnest(cols = c(y))
    
    #> # A tibble: 3 × 4
    #>       x     a b         c
    #>   <dbl> <dbl> <chr> <int>
    #> 1     1     1 2        NA
    #> 2     2     4 thank     1
    #> 3     2     5 you       2
    

    【讨论】:

      【解决方案2】:

      可能有一种更优雅的方式,但这很有效。把 tribble 变成字符,然后你就可以组合了。您很可能只需将“b”列更改为同一类就可以了。

      图书馆(tidyverse)

      df <- tribble(
        ~x, ~y,
        1,  tibble(a=1,   b=2),
        2,  tibble(a=4:5, b=c("thank","you"),c=1:2))
      
      
      
      
      df$y[[1]] <- purrr::map_df(df$y[[1]], as.character)
      
      df$y[[2]] <- purrr::map_df(df$y[[2]], as.character)
      
      df %>% unnest(y)
      

      从原始数据开始,您真正需要做的就是将第一个嵌套 tibble 中的 b 类更改为字符。

      df$y[[1]]$b <- as.character(df$y[[1]]$b )
      
      
      df %>% unnest(y)
      

      【讨论】:

      • 谢谢。保罗的回答更方便一些,因为我的真实数据要大得多。
      猜你喜欢
      • 2020-03-30
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2020-08-30
      • 2015-05-07
      相关资源
      最近更新 更多