R, как объединить фреймы данных в стиле кос - PullRequest
2 голосов
/ 17 января 2020

Скажем, у меня есть 2 кадра данных

dfA <- data.frame(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))
dfB <- data.frame(a = rpois(10,2), b = rpois(10,2), c = rpois(10,2), d = rpois(10,2), e = rpois(10,2))

с обычным merge(dfA, dfB) Я получаю кадр данных со столбцами в следующем порядке: x, y, z, q, t, a, b, c, d, e

Как объединить кадры данных, чтобы получить кадр данных со столбцами в следующем порядке:

x, a, y, b, z, c, q , д, т, е

ie. где первый столбец каждого фрейма данных расположен рядом друг с другом, затем 2-й столбец, затем 3-й и т. д. c.

Ответы [ 2 ]

3 голосов
/ 17 января 2020

Один из вариантов - order на основе последовательности столбцов, конкатенированных из обоих наборов данных

out <- merge(dfA, dfB) 
out1 <- out[order(c(seq_along(dfA), seq_along(dfB)))]
names(out1)
#[1] "x" "a" "y" "b" "z" "c" "q" "d" "t" "e"

или rbind имен столбцов, а затем приведите его к vector, чтобы получить он свернулся на порядок естественных столбцов в matrix/data.frame

out1 <- out[c(rbind(names(dfA), names(dfB)))]
names(out1)
#[1] "x" "a" "y" "b" "z" "c" "q" "d" "t" "e"
2 голосов
/ 17 января 2020

Вы можете использовать следующий базовый код R:

dfout <- merge(dfA,dfB)[as.vector(rbind(names(dfA),names(dfB)))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...