是否有基本的R函数来动态排序data.frame列,类似于dplyr everything()?

问题描述 投票:0回答:1

假设您有一个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())

但是我想使用基数R获得相同的输出。

我想出的最好的是,

keep1 <- c("id", "month", "year")
keep2 <- names(df1)[!names(df1) %in% keep1]
keep3 <- c(keep1, keep2)
df2 <- df1[, keep3]

可能会有更优雅的解决方案吗?就像,在基R中可能有一个类似于dplyr :: everything的函数吗?

r syntax
1个回答
0
投票

您可以使用setdiff

df1[, c(keep1, setdiff(names(df1), keep1))]
© www.soinside.com 2019 - 2024. All rights reserved.