【发布时间】: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中仍然有矩阵元素。