Переместить столбец сначала в кадр данных
У меня есть кадр данных, который я хочу экспортировать в 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"))]