在R中以列方式组合两个列表列表

时间:2017-12-10 22:05:41

标签: r nested-lists sapply mapply

我正在使用两个单独的数据框列表。它们的尺寸完全相同。我试图将每个数据帧(位于列表列表中)与另一个数据帧(位于列表的另一个列表中)组合在一起。我相信我需要使用mapply和sapply的某种组合,但我无法弄明白。以下是我到目前为止的情况:

mapply(function(x,y) { sapply(cbind) }, x = e06_bl, Y = e06_cos)

下面将给出一些类似于我正在使用的示例数据。我正在使用list1list2desired_list是我想要完成的。

df1_subA <- data.frame(sub = rep(1,3), val1 = round(rnorm(1:3),3))
df2_subA <- data.frame(sub = rep(1,5), val1 = round(rnorm(1:5),3))
df1_subB <- data.frame(sub = rep(2, 3), val1 = round(rnorm(1:3),3))
df2_subB <- data.frame(sub = rep(2,6), val1 = round(rnorm(1:6),3))

vec1_subA <-sample(3)
vec2_subA <- sample(5)
vec1_subB <- sample(3)
vec2_subB <- sample(6)

list1 <- list(list(df1_subA, df2_subA), list(df1_subB, df2_subB))
list2 <- list(list(vec1_subA, vec2_subA), list(vec1_subB, vec2_subB))
desired_list <- list(list(cbind(df1_subA, val2 = vec1_subA), cbind(df2_subA, val2 = vec2_subA)), list(cbind(df1_subB, val2 = vec1_subB), cbind(df2_subB, val2 = vec2_subB)))

1 个答案:

答案 0 :(得分:2)

lapply(X = 1:length(list1), FUN = function(i)
    lapply(X = 1:length(list1[[i]]), FUN = function(j) data.frame(list1[[i]][[j]], val2 = list2[[i]][[j]])))
# [[1]]
# [[1]][[1]]
  # sub   val1 val2
# 1   1  1.817    2
# 2   1  1.642    1
# 3   1 -0.007    3

# [[1]][[2]]
  # sub   val1 val2
# 1   1  0.314    3
# 2   1  1.527    4
# 3   1  0.327    5
# 4   1 -0.527    2
# 5   1 -0.151    1


# [[2]]
# [[2]][[1]]
  # sub   val1 val2
# 1   2 -1.694    3
# 2   2 -1.595    2
# 3   2  0.442    1

# [[2]][[2]]
  # sub   val1 val2
# 1   2 -0.773    2
# 2   2 -0.185    5
# 3   2  0.233    6
# 4   2  1.515    4
# 5   2  0.980    1
# 6   2  2.422    3