114 votes

Ajouter (insérer) une colonne entre deux colonnes dans un data.frame

J'ai un cadre de données qui comporte des colonnes a, b et c. J'aimerais ajouter une nouvelle colonne d entre b et c.

Je sais que je pourrais simplement ajouter d à la fin en utilisant cbind mais comment puis-je insérer entre deux colonnes ?

103voto

Kevin Zarca Points 1064

Je vous suggère d'utiliser la fonction add_column() de la tibble paquete.

library(tibble)
dataset <- data.frame(a = 1:5, b = 2:6, c=3:7)
add_column(dataset, d = 4:8, .after = 2)

Notez que vous pouvez utiliser les noms de colonne au lieu de l'index de colonne :

add_column(dataset, d = 4:8, .after = "b")

Ou utiliser l'argument .before au lieu de .after si c'est plus pratique.

add_column(dataset, d = 4:8, .before = "c")

52voto

ashah57 Points 597

Ajoutez votre nouvelle colonne :

df$d <- list/data

Ensuite, vous pouvez les réorganiser.

df <- df[, c("a", "b", "d", "c")]

26voto

Matthew Lundberg Points 21747

Vous pouvez réorganiser les colonnes avec [, ou présenter les colonnes dans l'ordre que vous souhaitez.

d <- data.frame(a=1:4, b=5:8, c=9:12)
target <- which(names(d) == 'b')[1]
cbind(d[,1:target,drop=F], data.frame(d=12:15), d[,(target+1):length(d),drop=F])

  a b  d  c
1 1 5 12  9
2 2 6 13 10
3 3 7 14 11
4 4 8 15 12

17voto

thelatemail Points 21202

En supposant que c suit toujours immédiatement b ce code ajoutera une colonne après b peu importe où b est dans votre data.frame.

> test <- data.frame(a=1,b=1,c=1)
> test
  a b c
1 1 1 1

> bspot <- which(names(test)=="b")

> data.frame(test[1:bspot],d=2,test[(bspot+1):ncol(test)])
  a b d c
1 1 1 2 1

Ou peut-être plus naturellement :

data.frame(append(test, list(d=2), after=match("b", names(test))))

9voto

buhtz Points 2072

Créez un exemple de data.frame et ajoutez-y une colonne.

df = data.frame(a = seq(1, 3), b = seq(4,6), c = seq(7,9))
df['d'] <- seq(10,12)
df

  a b c  d
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12

Réarrangement par index de colonne

df[, colnames(df)[c(1:2,4,3)]]

ou par nom de colonne

df[, c('a', 'b', 'd', 'c')]

Le résultat est

  a b  d c
1 1 4 10 7
2 2 5 11 8
3 3 6 12 9

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X