Изменить порядок столбцов с числовыми именами в r - PullRequest
1 голос
/ 30 апреля 2020

Если у меня есть кадр данных, подобный приведенному ниже, с числовыми именами столбцов

example = data.frame(1=c(1,8,3,9), 2=c(3,2,3,3), 3=c(5,2,5,4), 4=c(1,2,3,4), 5=c(2,5,7,8))

, который выглядит следующим образом:

1 2 3 4 5
1 3 5 1 2
8 2 2 2 5
3 3 5 3 7
9 3 4 4 8

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

3 4 5 1 2
5 1 2 1 3
2 2 5 8 2
5 3 7 3 3 
4 4 8 9 3 

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

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Мы можем использовать объединенный индекс столбца (c) на основе последовательности (:) в диапазоне значений

example[c(3:5, 1:2)]
#   3 4 5 1 2
#1 5 1 2 1 3
#2 2 2 5 8 2
#3 5 3 7 3 3
#4 4 4 8 9 3

Поскольку все имена столбцов нумеруются c, просто преобразовать в numeric и использовать это для заказа

v1 <- as.numeric(names(example))
example[c(v1[3:5], v1[1:2])]

Или просто сделать

example[c(names(example)[3:5], names(example)[1:2])]

Или другой способ с head и tail

example[c(tail(names(example), 3), head(names(example), 2))]

данные

example <- data.frame(`1`=c(1,8,3,9), `2`=c(3,2,3,3),
   `3`=c(5,2,5,4), `4`=c(1,2,3,4), `5`=c(2,5,7,8), check.names = FALSE)
0 голосов
/ 30 апреля 2020

R не позволит вам легко создавать столбцы с номерами в качестве имени. Если каким-то образом вы можете создавать столбцы с номерами, вы можете использовать match, чтобы получить порядок, в котором вы хотите имена столбцов.

example[match(c(3:5, 1:2), names(example))]

#  3 4 5 1 2
#1 5 1 2 1 3
#2 2 2 5 8 2
#3 5 3 7 3 3
#4 4 4 8 9 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...