【问题标题】:Joining nested and unnested data frames/tibbles连接嵌套和未嵌套的数据框/小标题
【发布时间】:2019-09-17 15:47:47
【问题描述】:

我认为我不完全理解嵌套的小标题(数据框)以及它们在加入“正常”时的行为,即非嵌套小标题。

示例:

## Create a list and a data frame
ll <- list(matrix(rnorm(4), nrow = 2), matrix(rnorm(4), nrow = 2))
ll
#> [[1]]
#>           [,1]      [,2]
#> [1,] 1.7299068 0.1577844
#> [2,] 0.7156288 0.6265956
#> 
#> [[2]]
#>            [,1]       [,2]
#> [1,] -0.5285925  1.0423880
#> [2,] -0.1524862 -0.3887486
df <- data.frame("name" = 1:2, "b" = c(0.4, 0.6))
df
#>   name   b
#> 1    1 0.4
#> 2    2 0.6

# Now I want to:
#  1. Create a nested data frame/tibble. 
#  2. Join df and the newely created nested data frame/tibble 
#
# There are many ways to create a nested tibble, a convinient one is:
df_nested <- tibble::enframe(ll)
df_nested
#> # A tibble: 2 x 2
#>    name value            
#>   <int> <list>           
#> 1     1 <dbl[,2] [2 x 2]>
#> 2     2 <dbl[,2] [2 x 2]>

# looks as expected

# Now when I try to join (merge(), cbind() and other join_* verbs are similar)
dplyr::left_join(df, df_nested, by = "name")
#>   name   b                                         value
#> 1    1 0.4    1.7299068, 0.7156288, 0.1577844, 0.6265956
#> 2    2 0.6 -0.5285925, -0.1524862, 1.0423880, -0.3887486

reprex package (v0.3.0) 于 2019 年 9 月 17 日创建

问题:

为什么left_join() 不保留嵌套结构。或者不同:什么 加入后我必须做什么才能保持嵌套结构?

欢迎对这里为什么不保留嵌套结构的简单和更详细的回答。

【问题讨论】:

  • 嵌套结构保留在您的示例中,除非我遗漏了什么?只有 print 方法使它显示为一个向量。请参阅str(dplyr::left_join(df, df_nested, by = "name")),或仅打印生成的value 列。如果您转换为tibble,print 方法会更清楚地表明您在value 中仍然有矩阵元素。

标签: r join tidyverse tibble


【解决方案1】:

尝试在连接之前将df 数据框转换为小标题:

df <- dplyr::as_tibble(df)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 2021-12-15
    • 2019-05-21
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多