Cbind dataframes в чередующемся порядке

#r

#r

Вопрос:

Допустим, у меня есть два фрейма данных со следующими столбцами.

 df1 <- data.frame("A.One"=1:10, "A.Two"=1:10, "A.Three"=1:10)
df2 <- data.frame("B.One"=1:10, "B.Two"=1:10, "B.Three"=1:10)
  

Я хочу связать их в определенном порядке (или связать их обычным образом и изменить их порядок для достижения этого порядка):

 x <- magic_cbind(df1, df2)
colnames(x)
  

Желаемый результат:

 A.One B.One A.Two B.Two A.Three B.Three
  

То есть я хочу, чтобы они были отсортированы по суффиксу — сначала у нас есть все единицы, затем все двойки, в соответствии с порядком, в котором они были изначально в каждом фрейме данных. Я надеюсь, что это объяснение имеет смысл…

Это кажется очень простым, но я не могу понять это, и я действительно не знаю, что искать, как вызвать этот порядок…

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

1. ggplot имеет неэкспортируемую функцию, которая может помочь: as.data.frame(ggplot2:::interleave(df1, df2))

Ответ №1:

Мы могли бы использовать base R для этого. После cbind ввода наборов данных, только order столбцы на основе объединенной последовательности каждого набора данных

 cbind(df1, df2)[order(c(seq_along(df1), seq_along(df2)))]
  

Ответ №2:

Вот tidyverse ответ. Привязка строк, используется select для определения порядка столбцов.

 df1 <- data.frame("A.One"=1:10, "A.Two"=1:10, "A.Three"=1:10)
df2 <- data.frame("B.One"=1:10, "B.Two"=1:10, "B.Three"=1:10)

df3 <- cbind(df1, df2) %>%
  select(A.One, B.One, A.Two, B.Two, A.Three, B.Three)
  

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

1. спасибо, но я забыл упомянуть, что я ищу решение, которое можно масштабировать для произвольного номера столбца