Объединение строк из двух фреймов данных в парах

70
7

Я хочу создать функцию, в которой слияние двух фреймов данных происходит попарно (т.е. Столбец df1 1 находится рядом с столбцом df2 1, а затем столбец df1 2 находится рядом с столбцом df2 2 (и т.д.)). Ниже приведен сценарий для создания двух случайных кадров данных для воспроизводимости.

    df1 <- data.frame(replicate(10,rnorm(20)))
df2 <- data.frame(replicate(10,rnorm(20)))

По сути, целью было бы иметь df1 $ X1 рядом с df2 $ X1, а затем df1 $ X2 быть рядом с df2 $ X2 и т.д., Сохраненным в новом фрейме данных (например, df3). Я знаю, что это можно записать в команде data.frame(), но это займет слишком много времени. Есть ли функция, которая достигает этого?

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

спросил(а) 2018-06-11T15:45:00+03:00 2 года, 4 месяца назад
1
Решение
83

Одна из возможностей - использовать Map

do.call(cbind, Map(cbind, df1, df2))

или mapply

do.call(cbind, mapply(cbind, df1, df2, SIMPLIFY = F))

Объяснение: Внутренний cbind связывает столбцы попарно из df1 и df2. Внешний cbind связывает list парных столбцов с конечным data.frame.

Используя пару меньших образцов data.frame С фиксированным семенем (для воспроизводимости), вот пример:

set.seed(2017);
df1 <- data.frame(replicate(2, rnorm(4)))
df2 <- data.frame(replicate(2, rnorm(4)))

do.call(cbind, Map(cbind, df1, df2))
# [,1] [,2] [,3] [,4]
#[1,] 1.43420148 -0.2653360 -0.069825227 -0.7467347
#[2,] -0.07729196 1.5632226 0.451905527 0.3066498
#[3,] 0.73913723 0.3427681 -1.958366456 -1.4304858
#[4,] -1.75860473 1.5724254 -0.001524259 1.1944265

ответил(а) 2018-06-11T15:49:00+03:00 2 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема