Сортировка столбцов Dataframe в списке по эталонному вектору - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь отсортировать список, заполненный 5 различными фреймами данных, но с одинаковыми именами столбцов, но с разным расположением.

Воспроизводимый пример:

d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6), y3 = c(5,6,7))
d2 <- data.frame(y2 = c(3, 2, 1), y3 = c(6, 5, 4), y1 = c(5,6,7))

my.list <- list(d1, d2)

> my.list
[[1]]
  y1 y2 y3
1  1  4  5
2  2  5  6
3  3  6  7

[[2]]
  y2 y3 y1
1  3  6  5
2  2  5  6
3  1  4  7 

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

colnamesvec <- c("y3", "y2", "y1")

Если я выделю каждый отдельный фрейм данных, я смогу достичь его с помощью базовой команды R.Но есть ли лучший способ легко пройти через это, чтобы достичь того, чего я хочу?

s <- my.list[[1]]
s[colnamesvec]

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

Используйте lapply и измените порядок столбцов для каждого кадра данных.

my.list[] <- lapply(my.list, function(x) x[colnamesvec])


my.list
#[[1]]
#  y3 y2 y1
#1  5  4  1
#2  6  5  2
#3  7  6  3

#[[2]]
#  y3 y2 y1
#1  6  3  5
#2  5  2  6
#3  4  1  7

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...