Предположим, у вас есть data.frame, и вы хотите динамически переупорядочить столбцы, используя базу R. Входные данные всегда будут выглядеть примерно так. Он всегда будет содержать переменные id, month и year, а также переменное число переменных данных (обозначается как v1, v2, v3 и т. Д.)
df1 <- data.frame(
id = 1:5,
v1 = LETTERS[1:5],
v2 = rep(2,5),
v3 = rep(10,5),
month = c("jan", "jan", "mar", "oct", "dec"),
year = c(1999, 2001, 1984, 1979, 2019),
stringsAsFactors = F)
Я хотел бы изменить порядокстолбцы, такие как id, месяц и год, всегда являются первыми тремя столбцами, а затем помещают переменные данных, начиная с столбца 4.
df2 <- data.frame(
id = 1:5,
month = c("jan", "jan", "mar", "oct", "dec"),
year = c(1999, 2001, 1984, 1979, 2019),
v1 = LETTERS[1:5],
v2 = rep(2,5),
v3 = rep(10,5),
stringsAsFactors = F)
Я знаю, что это можно сделать с помощью dplyr :: select вдольс помощью dplyr :: everything.
library(dplyr)
df2 <- df1 %>% select(id, month, year, everything())
Но я бы хотел добиться того же результата, используя базу R.
Лучшее, что я придумал, это
keep1 <- c("id", "month", "year")
keep2 <- names(df1)[!names(df1) %in% keep1]
keep3 <- c(keep1, keep2)
df2 <- df1[, keep3]
Может ли быть более элегантное решение? Например, может быть в базе R есть функция, похожая на dplyr :: everything?