按名称连接两个列表中的向量

时间:2019-09-19 21:47:44

标签: r list

因此,我在很大程度上简化了我的实际问题,但我试图找到一种方法将向量从一个列表中的值追加到另一个列表中的向量的值,并按名称进行操作(假设两个列表不因此,这是问题的设置(这里的数字本身是任意的):

Data1 <- list( c(1),c(2),c(3))
names(Data1) <- c("A", "B","C")

Data2 <- list(c(11), c(12), c(13))
names(Data2) <- c("B","A","C")

现在,我正在尝试做的是找到一种方法来获取第三个列表-例如Data3,这样调用Data3[["A"]]会得到与调用c(1,12)相同的结果:

[1] 1 12

所以>Data3应该给出:

[1] 1 12
[2] 2 11
[3] 3 13

从本质上讲,我希望将一个向量列表中的许多值附加到另一向量列表中,并按名称而不是顺序进行操作(如果可以的话)。 (我确实考虑过尝试一些循环,但是我觉得应该有另一种更简单的方法)

3 个答案:

答案 0 :(得分:2)

nm = names(Data1)
setNames(lapply(nm, function(x){
    c(Data1[[x]], Data2[[x]])
}), nm)
#$A
#[1]  1 12

#$B
#[1]  2 11

#$C
#[1]  3 13

答案 1 :(得分:2)

list(do.call("cbind", list(Data1, Data2)))
  [,1] [,2]
A 1    11  
B 2    12  
C 3    13  

如果您不介意输出是数据框:

Data3 <- rbind(data.frame(Data1), data.frame(Data2))

然后Data3[["A"]]将给您:

[1]  1 12

答案 2 :(得分:2)

我们可以使用Map并使用名称以与Data2相同的顺序排列Data1的元素(反之亦然),然后将它们连接起来。

Map(c, Data1, Data2[names(Data1)])

#$A
#[1]  1 12

#$B
#[1]  2 11

#$C
#[1]  3 13