gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:33:35 24 4
gpt4 key购买 nike

假设您有一个 data.frame,并且您希望使用基数 R 对列进行动态重新排序。输入数据将始终如下所示。它将始终包含 id , month , 和 year变量,以及可变数量的数据变量(表示为 v1v2v3 等)

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 的函数?

最佳答案

您可以使用 setdiff :

df1[, c(keep1, setdiff(names(df1), keep1))]

关于r - 是否有一个基本的 R 函数来动态排序类似于 dplyr everything() 的 data.frame 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58734284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com