1

我有一个数据框 df1,其中包含三列,分别称为 x、y 和 z

df1
x y z
8 2 8
9 3 1
1 7 2

我还有一个包含 30 个数据帧 df2、df3、... df31 的列表,每个数据帧都有三列 a、b 和 c。

list1
df2        df3        ...      df31
a b c      a b c               a b c 
4 7 5      4 8 6               3 1 7 
9 5 3      3 1 9               4 8 6
8 6 1      2 9 1               1 6 3

我想将 df1 的列 y 与列表中的每个数据框合并为一个新列。所以新的列表应该是这样的:

list2
df2          df3          ...      df31
a b c y      a b c y               a b c y 
4 7 5 2      4 8 6 2               3 1 7 2 
9 5 3 3      3 1 9 3               4 8 6 3
8 6 1 7      2 9 1 7               1 6 3 7

我一直在使用以下代码:

list2 <- mapply("cbind", list1, df1$y, SIMPLIFY = FALSE)

然而,这似乎只取 y 的第一个值并将其放入新列:

list2
df2          df3          ...      df31
a b c y      a b c y               a b c y 
4 7 5 2      4 8 6 2               3 1 7 2 
9 5 3 2      3 1 9 2               4 8 6 2
8 6 1 2      2 9 1 2               1 6 3 2

这似乎是一个简单的问题,我真的很坚持,所以我将不胜感激。谢谢!

4

1 回答 1

3

由于我们需要整个 'y' 列,因此可以将其包裹在list. 否则,它将遍历列的每个元素(也可能会有警告,因为长度不匹配)

Map(cbind, list1, y = list(df1$y))

或者

mapply(cbind, list1, y = list(df1$y), SIMPLIFY = FALSE)

此外,这可以很容易地完成lapply

lapply(list1, transform, y = df1$y)
于 2019-06-04T16:13:20.933 回答