web-dev-qa-db-fra.com

Déplacer une colonne à la première position dans un bloc de données

J'aimerais que la dernière colonne du bloc de données soit déplacée au début (en tant que première colonne). Comment puis-je le faire dans R?

Mon data.frame a environ un millier de colonnes pour changer l'ordre. Je veux juste choisir une colonne et "la déplacer au début".

48
ECII

Je ne sais pas si cela vaut la peine d'ajouter ceci comme réponse ou si un commentaire conviendrait, mais j'ai écrit une fonction appelée moveme qui vous permet de faire ce que vous voulez faire avec le langage que vous décrivez. Vous pouvez trouver la fonction à cette réponse: https://stackoverflow.com/a/18540144/1270695

Cela fonctionne sur le names de votre data.frame et génère un vecteur de caractères que vous pouvez utiliser pour réorganiser vos colonnes:

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

Si vous mélangez des choses comme ça, je vous suggère de convertir votre data.frame à un data.table et en utilisant setcolorder (avec ma fonction moveme, si vous le souhaitez) pour effectuer le changement par référence.


Dans votre question, vous avez également mentionné "Je veux juste choisir une colonne et la déplacer au début". S'il s'agit d'une colonne arbitraire, et pas spécifiquement de la dernière, vous pouvez également envisager d'utiliser setdiff.

Imaginez que vous travaillez avec le jeu de données "mtcars" et que vous souhaitez déplacer la colonne "am" au début.

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

L'approche select () de Dplyr

Déplacer la dernière colonne au début:

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

Ceci est également valable pour toutes les colonnes et toutes les quantités:

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

Exemple utilisant le cadre de données 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
118
marc_aragones

Vous pouvez changer l'ordre des colonnes en les adressant dans le nouvel ordre en les triant explicitement avec data[,c(ORDER YOU WANT THEM TO BE IN)]

Si vous voulez juste que la dernière colonne soit la première, utilisez: 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
29
Rentrop
dataframe<-dataframe[,c(1000, 1:999)]

cela déplacera votre dernière colonne, à savoir la 1000ème colonne, dans la première colonne.

16
Newbie

Si vous souhaitez déplacer une colonne nommée vers la première position, utilisez simplement:

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