r - R函数将不同长度的嵌套列表转换为数据框
问题描述
我有一个包含 10000 个嵌套列表的列表,其中包含两个组件(“x”和“y”)。例如
iter1 <- list(x = c(8500, 8510, 8520, 8530), y = c(1.2, 1.3, 1.4, 1.5))
iter2 <- list(x = c(8490, 8500, 8510, 8520, 8530), y = c(1.2, 1.2, 1.3, 1.4, 1.5))
iter3 <- list(x = c(8510, 8520, 8530, 8540, 8550, 8560), y = c(1.2, 1.2, 1.3, 1.4, 1.5, 1.6))
All <- list(iter1 = iter1, iter2 = iter2, iter3 = iter3)
我想创建一个数据框并从每个数据框转换 y 组件并将它们转换为与匹配的 x 值相对应的列,以给出如下所示的内容。
# iter1 iter2 iter3
# 8490 NA 1.2 NA
# 8500 1.2 1.2 NA
# 8510 1.3 1.3 1.2
# 8520 1.4 1.4 1.2
# 8530 1.5 1.5 1.3
# 8540 NA NA 1.4
# 8550 NA NA 1.5
# 8560 NA NA 1.6
我尝试了很多方法,但到目前为止都失败了。有没有有效的方法来做到这一点?
非常感谢,格雷厄姆
解决方案
list
您可以为每个输入创建一个 2 列数据框All
并加入它们。
library(dplyr)
library(purrr)
map(All, bind_rows) %>%
reduce(full_join, by = 'x') %>%
arrange(x) %>%
rename_with(~names(All), -1)
# A tibble: 8 x 4
# x iter1 iter2 iter3
# <dbl> <dbl> <dbl> <dbl>
#1 8490 NA 1.2 NA
#2 8500 1.2 1.2 NA
#3 8510 1.3 1.3 1.2
#4 8520 1.4 1.4 1.2
#5 8530 1.5 1.5 1.3
#6 8540 NA NA 1.4
#7 8550 NA NA 1.5
#8 8560 NA NA 1.6
基础 R 中的相同操作可以如下所示:
Reduce(function(x, y) merge(x, y, all = TRUE, by = 'x'),
lapply(All, function(x) do.call(cbind.data.frame, x)))
推荐阅读
- kendo-grid - dataitem.set 不更新浏览器显示剑道网格 mvc 中的值
- dart - Dart Null 安全概念未清除
- flutter - 有‘扑医生’吗?
- r - 在 R 中手动进行简单的聚类
- python-3.x - 具有矩阵类型输入的python混合整数线性规划
- php - 服务器端未正确读取授权承载
- javascript - 如何使用 CryptoJS 在 C# 中加密 AES
- javascript - 如何使用 fs 和批量请求读取多个 json 文件
- node.js - Nodejs 中的 Azure Bot Framework 网络聊天:将文本转换为语音时无法识别提示
- java - 生命周期配置未涵盖插件执行:org.bsc.maven:maven-processor-plugin:3.3.3:process