如何基于给定变量以硬编码方式构建含嵌套数据框的tibble?
构建嵌套数据框的硬编码方案
嘿,这个问题其实很容易解决,咱们直接用tibble()函数就能硬编码出包含嵌套数据的表格。先看完整代码,再给你拆解细节:
完整实现代码
library(tidyverse) # 你的原始变量(先保留下来) obsv_name <- "FOO" dat1 <- structure(c(0.033, 0.066, 0.233, 0.0333333333333333), .Dim = c(2L, 2L), .Dimnames = list(c("CXX_4", "YXRPW_112"), c("A", "R"))) dat2 <- structure(c(0.1, 0, 0.1, 0.033), .Dim = c(2L, 2L ), .Dimnames = list(c("XXX_62", "YYY_208"), c("A", "R"))) # 核心:硬编码构建嵌套tibble nested_tibble <- tibble( # 第一列:直接用你的字符串变量 observation = obsv_name, # 第二列:把两个数据对象放进列表,实现嵌套 nested_data = list(dat1, dat2) ) # 查看结果 print(nested_tibble)
输出结果
运行后你会得到这样的嵌套tibble:
#> # A tibble: 2 × 2 #> observation nested_data #> <chr> <list> #> 1 FOO <matrix [2 × 2]> #> 2 FOO <matrix [2 × 2]>
细节说明
嵌套的关键:用列表承载数据
tibble的一大优势就是支持列中存储复杂类型(比如列表、其他数据框)。这里我们把dat1和dat2作为列表的两个元素,赋值给nested_data列,这样就实现了“一行对应一个数据对象”的嵌套结构。如果想嵌套的是数据框而非矩阵
注意你的dat1和dat2其实是矩阵,如果希望嵌套的是标准tibble,可以把矩阵转成数据框,只需要修改列表里的内容:nested_tibble <- tibble( observation = obsv_name, nested_data = list( # 把矩阵转成带行名的tibble as_tibble(dat1, rownames = "row_id"), as_tibble(dat2, rownames = "row_id") ) )此时输出的
nested_data列就是tibble了:#> # A tibble: 2 × 2 #> observation nested_data #> <chr> <list> #> 1 FOO <tibble [2 × 3]> #> 2 FOO <tibble [2 × 3]>
验证嵌套内容
如果想查看嵌套里的具体数据,用unnest()或者直接提取列表元素就行:
# 查看第一行的嵌套数据 nested_tibble$nested_data[[1]]
内容的提问来源于stack exchange,提问作者littleworth
相关产品推荐
相关产品推荐

