将列移动到数据框中的第一个位置

ECI*_*CII 52 r dataframe

我想将数据框的最后一列移到开头(作为第一列).我怎么能在R?

我的data.frame有大约一千列来改变订单.我只想选择一列并"将其移至开头".

mar*_*nes 129

Dplyr的select()方法

将最后一列移至开头:

new_df <- df %>%
  select(last_column_name, everything())
Run Code Online (Sandbox Code Playgroud)

这也适用于任何列和任何数量:

new_df <- df %>%
  select(col_5, col_8, everything())
Run Code Online (Sandbox Code Playgroud)

使用mtcars数据框的示例:

head(mtcars, n = 2)
#                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4

# Last column is 'carb'
new_df <- mtcars %>% select(carb, everything())

head(new_df, n = 2)
#                   carb  mpg cyl disp  hp drat    wt  qsec vs am gear
# Mazda RX4            4 21.0   6  160 110 3.90 2.620 16.46  0  1    4
# Mazda RX4 Wag        4 21.0   6  160 110 3.90 2.875 17.02  0  1    4
Run Code Online (Sandbox Code Playgroud)


Ren*_*rop 31

您可以通过明确选择列来更改列的顺序,方法是按新顺序选择列 data[,c(ORDER YOU WANT THEM TO BE IN)]

如果您只想要最后一列使用: data[,c(ncol(data),1:(ncol(data)-1))]

> head(cars)
  speed dist
1     4    2
2     4   10
3     7    4
4     7   22
5     8   16
6     9   10

> head(cars[,c(2,1)])
  dist speed
1    2     4
2   10     4
3    4     7
4   22     7
5   16     8
6   10     9
Run Code Online (Sandbox Code Playgroud)

  • 然后只使用`data [,c(ncol(data),1:(ncol(data)-1))]` (6认同)

H 1*_*H 1 20

dplyr 1.0.0现在包括relocate()重新排序列的功能。默认行为是将命名列移动到第一个位置。

library(dplyr) # from version 1.0.0 

mtcars %>%
  relocate(carb) %>%
  head()

                  carb  mpg cyl disp  hp drat    wt  qsec vs am gear
Mazda RX4            4 21.0   6  160 110 3.90 2.620 16.46  0  1    4
Mazda RX4 Wag        4 21.0   6  160 110 3.90 2.875 17.02  0  1    4
Datsun 710           1 22.8   4  108  93 3.85 2.320 18.61  1  1    4
Hornet 4 Drive       1 21.4   6  258 110 3.08 3.215 19.44  1  0    3
Hornet Sportabout    2 18.7   8  360 175 3.15 3.440 17.02  0  0    3
Valiant              1 18.1   6  225 105 2.76 3.460 20.22  1  0    3
Run Code Online (Sandbox Code Playgroud)

但是其他位置可以用.before.after参数指定:

mtcars %>%
  relocate(gear, carb, .before = cyl) %>%
  head()

                   mpg gear carb cyl disp  hp drat    wt  qsec vs am
Mazda RX4         21.0    4    4   6  160 110 3.90 2.620 16.46  0  1
Mazda RX4 Wag     21.0    4    4   6  160 110 3.90 2.875 17.02  0  1
Datsun 710        22.8    4    1   4  108  93 3.85 2.320 18.61  1  1
Hornet 4 Drive    21.4    3    1   6  258 110 3.08 3.215 19.44  1  0
Hornet Sportabout 18.7    3    2   8  360 175 3.15 3.440 17.02  0  0
Valiant           18.1    3    1   6  225 105 2.76 3.460 20.22  1  0
Run Code Online (Sandbox Code Playgroud)


A5C*_*2T1 18

我不知道是否值得将此作为答案添加或者评论是否合适,但我写了一个函数moveme,让你可以用你描述的语言做你想做的事情.您可以在此答案中找到该功能:https://stackoverflow.com/a/18540144/1270695

它适用于names您的data.frame并生成一个可用于重新排序列的字符向量:

mydf <- data.frame(matrix(1:12, ncol = 4))
mydf
moveme(names(mydf), "X4 first")
# [1] "X4" "X1" "X2" "X3"
moveme(names(mydf), "X4 first; X1 last")
# [1] "X4" "X2" "X3" "X1"

mydf[moveme(names(mydf), "X4 first")]
#   X4 X1 X2 X3
# 1 10  1  4  7
# 2 11  2  5  8
# 3 12  3  6  9
Run Code Online (Sandbox Code Playgroud)

如果你像这样拖拽周围的东西,我建议你转换data.frame成a data.table和使用setcolorder(moveme如果你愿意的话,我的功能)通过引用进行更改.


在您的问题中,您还提到"我只想选择一列并将其移至开头".如果它是一个任意的列,而不是特定的列,你也可以看一下使用setdiff.

想象一下,您正在使用"mtcars"数据集,并希望将"am"列移至开头.

x <- "am"
mtcars[c(x, setdiff(names(mtcars), x))]
Run Code Online (Sandbox Code Playgroud)


小智 17

dataframe<-dataframe[,c(1000, 1:999)]
Run Code Online (Sandbox Code Playgroud)

这会将您的最后一列(即第1000列)移动到第一列.


小智 14

如果要将任何命名列移动到第一个位置,只需使用:

df[,c(which(colnames(df)=="desired_colname"),which(colnames(df)!="desired_colname"))]
Run Code Online (Sandbox Code Playgroud)

  • 这很容易是最好的答案 (2认同)

小智 5

使用任意数量的行或列将数据帧的最后一列移动到第一列位置的本机 R 方法:

df <- df[,c(ncol(df),1:ncol(df)-1)]
Run Code Online (Sandbox Code Playgroud)

它可用于通过替换将任何列移动到第一列:

df <- df[,c(your_column_number_here,1:ncol(df)-1)]
Run Code Online (Sandbox Code Playgroud)

如果您不知道列号,但知道列标签名称,请执行以下操作替换“your_column_name_here”:

columnNumber <- which(colnames(df)=="your_column_name_here")
df <- df[,c(columnNumber,1:ncol(df)-1)]
Run Code Online (Sandbox Code Playgroud)


Val*_*tin 5

还有一个data.table选项setcolorder()

library(data.table)
mtcars_copy <- copy(mtcars)
setDT(mtcars_copy)

# Move column "gear" in the first position
setcolorder(mtcars_copy, neworder = "gear")

head(mtcars_copy)

#    gear  mpg cyl disp  hp drat    wt  qsec vs am carb
# 1:    4 21.0   6  160 110 3.90 2.620 16.46  0  1    4
# 2:    4 21.0   6  160 110 3.90 2.875 17.02  0  1    4
# 3:    4 22.8   4  108  93 3.85 2.320 18.61  1  1    1
# 4:    3 21.4   6  258 110 3.08 3.215 19.44  1  0    1
# 5:    3 18.7   8  360 175 3.15 3.440 17.02  0  0    2
# 6:    3 18.1   6  225 105 2.76 3.460 20.22  1  0    1
Run Code Online (Sandbox Code Playgroud)

如果有多列,则提及向量中的顺序:

setcolorder(mtcars_copy, neworder = c("vs", "carb"))

head(mtcars_copy)
#    vs carb gear  mpg cyl disp  hp drat    wt  qsec am
# 1:  0    4    4 21.0   6  160 110 3.90 2.620 16.46  1
# 2:  0    4    4 21.0   6  160 110 3.90 2.875 17.02  1
# 3:  1    1    4 22.8   4  108  93 3.85 2.320 18.61  1
# 4:  1    1    3 21.4   6  258 110 3.08 3.215 19.44  0
# 5:  0    2    3 18.7   8  360 175 3.15 3.440 17.02  0
# 6:  1    1    3 18.1   6  225 105 2.76 3.460 20.22  0
Run Code Online (Sandbox Code Playgroud)