mar*_*nes 129
将最后一列移至开头:
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)
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)
小智 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)
还有一个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)