重新排序 R 中的数据框列

Re-order dataframe columns in R

我需要对包含 500 列的数据框中的列位置重新排序。其实我只是想让最后一列在第三和第四列之间移动。

这是我尝试过的:

 df[ ,c(1, 2, 3, ncol(df), 4:ncol(df)-1)]

但它给了我一个值向量,它是列的编号。有人能告诉我我认为这段代码有什么问题吗?

问题可能与运算符优先级有关 - 将 (ncol(df)-1) 括在括号内(假设原始对象是 data.frame

library(data.table)
df <-  df[ ,c(1, 2, 3, ncol(df), 4:(ncol(df)-1)), with = FALSE]

或使用setcolorder更新原始对象

setcolorder(df, c(1, 2, 3, ncol(df), 4:(ncol(df)-1)))

注意:with = FALSE 是在 OP 确认它是一个 data.table 对象后添加的


或者另一种选择是 select

library(dplyr)
df <- df %>% 
    select(1:3, last_col(), everything())

或者用relocate

df <- df %>% 
     relocate(last_col(), .before = 4)

-可重现的示例测试

> data(mtcars)
> head(mtcars)[, c(1, 2, 3, ncol(mtcars), 4:(ncol(mtcars)-1))]
                   mpg cyl disp carb  hp drat    wt  qsec vs am gear
Mazda RX4         21.0   6  160    4 110 3.90 2.620 16.46  0  1    4
Mazda RX4 Wag     21.0   6  160    4 110 3.90 2.875 17.02  0  1    4
Datsun 710        22.8   4  108    1  93 3.85 2.320 18.61  1  1    4
Hornet 4 Drive    21.4   6  258    1 110 3.08 3.215 19.44  1  0    3
Hornet Sportabout 18.7   8  360    2 175 3.15 3.440 17.02  0  0    3
Valiant           18.1   6  225    1 105 2.76 3.460 20.22  1  0    3

             
> head(mtcars) %>% select(1:3, last_col(), everything())
                   mpg cyl disp carb  hp drat    wt  qsec vs am gear
Mazda RX4         21.0   6  160    4 110 3.90 2.620 16.46  0  1    4
Mazda RX4 Wag     21.0   6  160    4 110 3.90 2.875 17.02  0  1    4
Datsun 710        22.8   4  108    1  93 3.85 2.320 18.61  1  1    4
Hornet 4 Drive    21.4   6  258    1 110 3.08 3.215 19.44  1  0    3
Hornet Sportabout 18.7   8  360    2 175 3.15 3.440 17.02  0  0    3
Valiant           18.1   6  225    1 105 2.76 3.460 20.22  1  0    3
> ?relocate
> head(mtcars) %>% relocate(last_col(), .before = 4)
                   mpg cyl disp carb  hp drat    wt  qsec vs am gear
Mazda RX4         21.0   6  160    4 110 3.90 2.620 16.46  0  1    4
Mazda RX4 Wag     21.0   6  160    4 110 3.90 2.875 17.02  0  1    4
Datsun 710        22.8   4  108    1  93 3.85 2.320 18.61  1  1    4
Hornet 4 Drive    21.4   6  258    1 110 3.08 3.215 19.44  1  0    3
Hornet Sportabout 18.7   8  360    2 175 3.15 3.440 17.02  0  0    3
Valiant           18.1   6  225    1 105 2.76 3.460 20.22  1  0    3