Переместить столбец сначала в кадр данных

У меня есть кадр данных, который я хочу экспортировать в csv. Для проблем с читабельностью я хотел бы, чтобы последний столбец кадра данных был перемещен в начало (в качестве первого столбца). Как я могу сделать это в R?

В моем data.frame есть около тысячи столбцов, чтобы изменить порядок. Я просто хочу выбрать один столбец и "переместить его в начало".

Ответ 1

Я не знаю, стоит ли добавлять это в качестве ответа или если комментарий будет в порядке, но я написал функцию под названием moveme, которая позволяет делать то, что вы хотите сделать с языком, который вы описываете. Вы можете найти функцию в этом ответе: fooobar.com/questions/126214/...

Он работает с 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

Если вы так перетасовываете вещи, я предлагаю преобразовать ваш data.frame в data.table и использовать setcolorder (с моей функцией moveme, если хотите), чтобы внести изменение по ссылке.


В вашем вопросе вы также упоминали: "Я просто хочу выбрать один столбец и перенести его в начало". Если это произвольный столбец, а не последний, вы также можете использовать setdiff.

Представьте, что вы работаете с набором данных "mtcars" и хотите переместить столбец "am" в начало.

x <- "am"
mtcars[c(x, setdiff(names(mtcars), x))]

Ответ 2

Подход Dplyr select()

Перемещение последнего столбца в начало:

new_df <- df %>%
  select(last_column_name, everything())

Это также справедливо для любого столбца и любой величины:

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

Ответ 3

Вы можете изменить порядок столбцов, указав их в новом порядке, выбирая их явно с помощью 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

Ответ 4

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

это переместит ваш последний столбец, то есть 1000-й столбец, в первый столбец.

Ответ 5

Если вы хотите переместить любой столбец named в первую позицию, просто используйте:

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