как объединить два фрейма данных по строкам x и y, но столбцы должны быть рядом (df1 $ x) рядом (df2 $ y)?

#r #dplyr #multidplyr

#r #dplyr #multidplyr

Вопрос:

У меня есть два фрейма данных с одинаковыми именами столбцов и строк. Я хотел бы объединить их по строкам, но столбцы должны быть рядом с df $ x и df $ y.

Я пробовал до сих пор, но не получал требуемых результатов.

 merge(df.test1, df.test2, by.x = "V1", by.y = "V1")
 

Вывод

     V1  2800M_15-0.5-1.x    2800M_15-0.5-2.x    2800M_15-0.5-3.x    cA_15-0.5-1.x   cA_15-0.5-2.x   2800M_15-0.5-1.y    2800M_15-0.5-2.y    2800M_15-0.5-3.y    cA_15-0.5-1.y   cA_15-0.5-2.y
1   RowA    1   1   1   1   1   1   1   1   1   1
2   RowB    1   1   1   1   1   1   1   1   1   1
3   RowC    1   1   1   1   1   1   1   1   1   1
 

Требуемый вывод

     V1  2800M_15-0.5-1.x    2800M_15-0.5-1.y    2800M_15-0.5-2.x    2800M_15-0.5-2.y    2800M_15-0.5-3.x    2800M_15-0.5-3.y    cA_15-0.5-1.x   cA_15-0.5-1.y   cA_15-0.5-2.x   cA_15-0.5-2.y
1   RowA    1   1   1   1   1   1   1   1   1   1
2   RowB    1   1   1   1   1   1   1   1   1   1
3   RowC    1   1   1   1   1   1   1   1   1   1
 

Ответ №1:

Вариантом было бы изменить порядок столбцов на основе имен, т.Е. order На подстроке имен столбцов без .x или .y в конце, и использовать индекс порядка в качестве индексации столбцов для перестановки столбцов

 out <- merge(df.test1, df.test2, by.x = "V1", by.y = "V1")
out1 <- out[c(1, order(sub("\.[xy]$", "", names(out)[-1]))   1)]
 

Комментарии:

1. Потрясающий Акрун, почему я об этом не подумал. Я приму ответ через 9 минут в соответствии с условием стекового потока. LOL, спасибо.