【发布时间】:2019-11-25 04:31:53
【问题描述】:
假设您有一个 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、month 和year 始终是前三列,然后将数据变量从第 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())
但我想使用 base R 实现相同的输出。
我想到的最好的是,
keep1 <- c("id", "month", "year")
keep2 <- names(df1)[!names(df1) %in% keep1]
keep3 <- c(keep1, keep2)
df2 <- df1[, keep3]
可能有更优雅的解决方案吗?比如,R 中是否有类似于dplyr::everything 的函数?
【问题讨论】:
标签: r