Реорганизация столбцов Dataframe с похожими именами - PullRequest
0 голосов
/ 20 сентября 2018

это мой фрейм данных:

df<-as.data.frame(matrix(rexp(200, rate=.1), ncol=20))
colnames(df)<-c("one","two","three","four","five","six","seven","eight","nine","ten","one_new","two_new","three_new","four_new","five_new","six_new","seven_new","eight_new","nine_new","ten_new")

Как изменить положение столбцов этого фрейма, чтобы получить такой вывод:

One | One_new | two | two_new | three | three_new|.....|ten | ten_new

любая помощь?

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Вы можете создать новый фрейм данных с нужным вам порядком столбцов

df2<-df[c("one","One_new","two","two_new","three","three_new","ten","ten_new")]

или с помощью индексов:

df2<-df[c(1,11,2,12,3,13...)] #so on.
0 голосов
/ 20 сентября 2018

Вы можете использовать следующий код для управления порядком имен столбцов.

df[, as.vector(t(matrix(colnames(df), ncol = 2)))]

Или управлять индексом столбца

df[, as.vector(t(matrix(1:20, ncol = 2)))]

Или определить порядок в векторе (cols), а затем используйте lapply и grep для получения имен столбцов.

cols <- c("one","two","three","four","five","six","seven","eight","nine","ten")

df[, unlist(lapply(cols, function(x) grep(x, colnames(df), value = TRUE)))]
0 голосов
/ 20 сентября 2018

Длинным подходом было бы рассмотреть возможность использования starts_with избранных помощников.Ваша ситуация заключается в том, что вы хотите, чтобы столбцы, начинающиеся с одного и того же термина (например, «один»), и другой столбец с тем же термином, но с дополнительным суффиксом («новый») были размещены рядом друг с другом.starts_with делает это, захватывая столбцы, имена которых начинаются с одного и того же термина (например, начинается с «один», включая оба столбца «один» и «один_новый») и размещая их в таком порядке.

df2 <- df %>%
  select(starts_with("one"), starts_with("two"), starts_with("three"), starts_with("four"),
     starts_with("five"), starts_with("six"), starts_with("seven"), starts_with("eight"),
     starts_with("nine"), starts_with("ten"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...