如何在R中整理长度不一的嵌套列表数据?
嵌套列表转宽表解决方案
模拟原数据集(替换为你的实际数据)
假设你的嵌套列表结构如下(每个子列表包含日期x和数值y,变量名对应var1至var6):
nested_data <- list( var1 = list(x = as.Date(c("2023-01-01", "2023-01-02", "2023-01-03")), y = c(1, 2, 3)), var2 = list(x = as.Date(c("2023-01-01", "2023-01-03")), y = c(4, 6)), var3 = list(x = as.Date(c("2023-01-02", "2023-01-04")), y = c(5, 7)), var4 = list(x = as.Date(c("2023-01-01", "2023-01-02", "2023-01-04")), y = c(8, 9, 10)), var5 = list(x = as.Date(c("2023-01-03")), y = c(11)), var6 = list(x = as.Date(c("2023-01-01", "2023-01-04")), y = c(12, 13)) )
步骤1:转长格式数据框
先把嵌套结构展开,给每个数值标记对应的变量名和日期:
library(tidyverse) long_df <- nested_data %>% enframe(name = "var", value = "data") %>% # 给每个子列表添加变量名标签 unnest_wider(data) %>% # 把x/y从子列表拆分为独立列 unnest(c(x, y)) %>% # 把x/y的向量拆分为逐行数据 rename(date = x, value = y) # 重命名列名提升可读性
步骤2:转宽格式并填充缺失值
用pivot_wider将长表转换为目标宽表,自动用NA填充缺失的数值:
wide_df <- long_df %>% pivot_wider( names_from = var, # 将var列的内容作为新列名 values_from = value, # 将value列的内容对应到新列 values_fill = NA # 缺失值用NA填充 ) %>% arrange(date) # 按日期排序
最终输出结果
运行后得到的宽表结构如下(按日期排序,缺失值用NA填充):
| date | var1 | var2 | var3 | var4 | var5 | var6 |
|---|---|---|---|---|---|---|
| 2023-01-01 | 1 | 4 | NA | 8 | NA | 12 |
| 2023-01-02 | 2 | NA | 5 | 9 | NA | NA |
| 2023-01-03 | 3 | 6 | NA | NA | 11 | NA |
| 2023-01-04 | NA | NA | 7 | 10 | NA | 13 |
内容的提问来源于stack exchange,提问作者wernor
相关产品推荐
相关产品推荐

