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

时间:2014-03-09 18:41:45

标签: r dataframe

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

中做到这一点

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

8 个答案:

答案 0 :(得分:104)

Dplyr的select()方法

将最后一列移至开头:

new_df <- df %>%
  select(col_5, col_8, everything())

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

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 数据框的示例:

# cat /proc/cmdline
optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN

答案 1 :(得分:25)

您可以通过使用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

答案 2 :(得分:14)

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

它适用于names的{​​{1}},并生成一个可用于重新排序列的字符向量:

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 转换为data.frame并使用data.table(使用我的setcolorder功能,如果您愿意的话)通过引用进行更改。


在您的问题中,您还提到“我只想选择一列并将其移至开头”。如果它是一个任意列,而不是特定列,您还可以查看使用moveme

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

setdiff

答案 3 :(得分:13)

dataframe<-dataframe[,c(1000, 1:999)]

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

答案 4 :(得分:12)

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

df[,c(which(colnames(df)=="desired_colname"),which(colnames(df)!="desired_colname"))]

答案 5 :(得分:11)

Single(...)现在包括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 .before参数指定其他位置:

.after

答案 6 :(得分:1)

将任意列从任意位置移至数据中的第一个位置

n <- which(colnames(df)=="column_need_move")
column_need_move <- df$column_need_to_move
df <- cbind(column_need_move, df[,-n])

答案 7 :(得分:0)

还有带有 data.tablesetcolorder() 选项:

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

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

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