Как объединить столбец фрейма данных с несколькими фреймами данных в списке?

У меня есть фрейм данных 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

Я хочу объединить столбец y df1 с каждым фреймом данных в списке в качестве нового столбца. Итак, новый список должен выглядеть так:

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

Это кажется легкой проблемой, и я действительно застрял в ней, поэтому буду признателен за любую помощь. Спасибо!


person User2010S    schedule 04.06.2019    source источник
comment
Вам нужно list(df1$y) или df1['y']   -  person akrun    schedule 04.06.2019


Ответы (1)


Поскольку нам нужен столбец «y» в целом, его можно обернуть в list. В противном случае он будет перебирать каждый элемент столбца (также, возможно, будут предупреждения, потому что длина не будет совпадать)

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

Or

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

Кроме того, это легко сделать с помощью lapply

lapply(list1, transform, y = df1$y)
person akrun    schedule 04.06.2019