首页 > 解决方案 > 将两个元素列表合并为一个具有相同元素但每个元素有两个变量的列表

问题描述

我有两个 48 个元素的列表。列表中的每个元素都有一个变量(下面的 DiffINT 或 DiffEXT),具有不同数量的观察值。两个列表中所有元素的名称都相同。

我想做的是根据元素名称合并两个元素列表,最后每个元素有两个变量。

额外问题:我有两个 48 个元素的列表,两个列表都有相同的元素。一个列表有一个变量,其中有一个观察值,另一个列表是每个元素有六个变量,观察值不同。我可以以某种方式合并这些以完成与上述相同的操作吗?

我已经查看了其他问题并尝试了 append() 和 cbind() 以及其他功能,但它们都没有完成我想要的。我正在寻找的示例如下。

> str(DiffsMerged)
List of 48
 $ Element1:List of 2
  ..$ DiffINT : num 1 0.642 0.27 -0.102 -0.123 ...
  ..$ DiffEXT : num 1 0.1397 -0.1045 -0.0751 -0.1414 ...
 $ Element 2:List of 2
  ..$ DiffINT : num  1 0.5842 0.3453 0.158 -0.0259 ...
  ..$ DiffEXT : num 1 -0.0312 -0.0321 -0.033 -0.0339 ...
 $ Element 3:List of 2
  ..$ DiffINT : num 1 0.908 0.816 0.724 0.632 ...
  ..$ DiffEXT : num 1 0.584 0.21 -0.163 -0.406 

提前谢谢了。

编辑添加:每当我想查看单个列表(DiffINT 和 DiffEXT)时,都会收到以下错误。想法?

 > View(DiffEXT)
 Error in if (more || nchar(output) > 80) { : 
   missing value where TRUE/FALSE needed

标签: rlistnested-lists

解决方案


lapply您可以通过循环获得简单的“合并” :

all_names <- union(names(DiffINT), names(DiffEXT))
DiffsMerged <- lapply(
  X   = all_names,
  FUN = function(name) {
    list(DiffINT[[name]], DiffEXT[[name]])
  }
)
names(DiffsMerged) <- all_names
str(DiffsMerged)
# List of 3
#  $ Element1:List of 2
#   ..$ : num [1:5] 1 0.642 0.27 -0.102 -0.123
#   ..$ : num [1:5] 1 0.1397 -0.1045 -0.0751 -0.1414
#  $ Element2:List of 2
#   ..$ : num [1:5] 1 0.1397 -0.1045 -0.0751 -0.1414
#   ..$ : num [1:5] 1 -0.0312 -0.0321 -0.033 -0.0339
#  $ Element3:List of 2
#   ..$ : num [1:5] 1 0.908 0.816 0.724 0.632
#   ..$ : num [1:5] 1 0.584 0.21 -0.163 -0.406

我不知道您打算将这些数据用于什么目的,但它有助于保持整洁。仅当两个列表具有相同名称且所有元素具有相同长度时才执行此操作。

int_df <- data.frame(DiffINT)
int_df[["source"]] <- "int"
ext_df <- data.frame(DiffEXT)
ext_df[["source"]] <- "ext"
merged_df <- rbind(int_df, ext_df)
merged_df
#    Element1 Element2 Element3 source
# 1    1.0000   1.0000    1.000    int
# 2    0.6420   0.1397    0.908    int
# 3    0.2700  -0.1045    0.816    int
# 4   -0.1020  -0.0751    0.724    int
# 5   -0.1230  -0.1414    0.632    int
# 6    1.0000   1.0000    1.000    ext
# 7    0.1397  -0.0312    0.584    ext
# 8   -0.1045  -0.0321    0.210    ext
# 9   -0.0751  -0.0330   -0.163    ext
# 10  -0.1414  -0.0339   -0.406    ext

推荐阅读