Перемістіть стовпець у перше місце у кадрі даних


79

Я хотів би, щоб останній стовпець кадру даних перемістився на початок (як перший стовпець). Як я можу це зробити в R?

Мій data.frame має близько тисячі стовпців, щоб змінити порядок, як правило. Я просто хочу вибрати одну колонку і "перенести її на початок".

Відповіді:


24

Я не знаю, чи варто додавати це як відповідь, чи коментар буде чудовим, але я написав функцію, яка називається, 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

Якщо ви перетасовуєте речі навколо цього, я пропоную перетворити їх data.frameна a data.tableта скористатися setcolorder(з моєю movemeфункцією, якщо ви хочете), щоб внести зміни за посиланням.


У своєму питанні ви також згадали "Я просто хочу вибрати одну колонку та перенести її на початок". Якщо це довільний стовпець, а не конкретно останній, ви також можете розглянути використання setdiff.

Уявіть, що ви працюєте з набором даних «mtcars» і хочете перенести стовпець «am» на початок.

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

186

Підхід 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

35

Ви можете змінити порядок стовпців, адресуючи їх у новому порядку, вибравши їх явно за допомогою 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

Спасибі, це зруйнує повний кадр даних (мій DF має 1000 стовпців)
ECII

8
тоді просто використовуйтеdata[,c(ncol(data),1:(ncol(data)-1))]
Rentrop

саме те, що я шукав. Мені довелося перенести останні 8 стовпців на початку інших 33 стовпців, і я використовував їх. вираз <- вираз1 [, c (33: 40,1: (32))] Дякую!
Urvah Shabbir

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

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


19

Якщо ви хочете перемістити будь-який іменований стовпець на перше місце, просто використовуйте:

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

2
Тут легко знайти найкращу відповідь
Ніл Барш,

1
Здається, це не працює, коли названий стовпець є впорядкованим фактором.
DLyons

11

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:

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

4

Власний підхід R, який працює з будь-якою кількістю рядків або стовпців для переміщення останнього стовпця кадру даних у позицію першого стовпця:

df <- df[,c(ncol(df),1:ncol(df)-1)]

Його можна використовувати для переміщення будь-якого стовпця до першого стовпця, замінивши:

df <- df[,c(your_column_number_here,1:ncol(df)-1)]

Якщо ви не знаєте номер стовпця, але знаєте ім'я мітки стовпця, виконайте наступне, замінивши "ваше_ім'я_столбця_тут":

columnNumber <- which(colnames(df)=="your_column_name_here")
df <- df[,c(columnNumber,1:ncol(df)-1)]

1

Перемістіть будь-який стовпець з будь-якого положення на перше місце у ваших даних

n <- which(colnames(df)=="column_need_move")
column_need_move <- df$column_need_to_move
df <- cbind(column_need_move, df[,-n])
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.