web-dev-qa-db-fra.com

Est-il possible d'échanger des colonnes dans un bloc de données en utilisant R?

J'ai trois variables dans un cadre de données et voudrais échanger les 4 colonnes de

"dam"   "piglet"   "fdate"   "ssire"

à

"piglet"   "ssire"   "dam"   "tdate"

Existe-t-il un moyen de permuter l’échange avec R?

Toute aide serait très appréciée.

Baz

18
baz
dfrm <- dfrm[c("piglet", "ssire", "dam", "tdate")]

OU:

dfrm <- dfrm[ , c("piglet", "ssire", "dam", "tdate")]
31
42-
d <- data.frame(a=1:3, b=11:13, c=21:23)
d
#  a  b  c
#1 1 11 21
#2 2 12 22
#3 3 13 23
d2 <- d[,c("b", "c", "a")]
d2
#   b  c a
#1 11 21 1
#2 12 22 2
#3 13 23 3

ou vous pouvez faire la même chose en utilisant index:

d3 <- d[,c(2, 3, 1)]
d3
#   b  c a
#1 11 21 1
#2 12 22 2
#3 13 23 3
13
kohske

Pour résumer les autres publications, il existe trois façons de modifier l'ordre des colonnes et deux manières de spécifier l'indexation dans chaque méthode.

Étant donné un échantillon de trame de données

dfr <- data.frame(
  dam    = 1:5,
  piglet = runif(5),
  fdate  = letters[1:5],
  ssire  = rnorm(5)
)

Kohske's answer: Vous pouvez utiliser une indexation standard de type matrice à l'aide de numéros de colonne

dfr[, c(2, 4, 1, 3)]

ou en utilisant des noms de colonne

dfr[, c("piglet", "ssire", "dam", "fdate")]

Réponse de DWin & Gavin: Les cadres de données vous permettent d'omettre l'argument de la ligne lors de la spécification de l'index.

dfr[c(2, 4, 1, 3)]
dfr[c("piglet", "ssire", "dam", "fdate")]

Réponse de PaulHurleyuk: Vous pouvez également utiliser subset.

subset(dfr, select = c(2, 4, 1, 3))
subset(dfr, select = c(c("piglet", "ssire", "dam", "fdate")))
8
Richie Cotton

Vous pouvez utiliser l'argument 'select' du sous-ensemble;

#Assume df contains "dam" "piglet" "fdate" "ssire"

newdf<-subset(df, select=c("piglet", "ssire", "dam", "tdate"))
5
PaulHurleyuk

J'ai rapidement écrit une fonction qui prend un vecteur v et les index de colonne a et b que vous voulez échanger. 

swappy = function(v,a,b){  # where v is a dataframe, a and b are the 
columns indexes to swap

name = deparse(substitute(v))

helpy = v[,a]
v[,a] = v[,b]
v[,b] = helpy


name1 = colnames(v)[a] 
name2 = colnames(v)[b] 

colnames(v)[a] = name2
colnames(v)[b] = name1

assign(name,value = v , envir =.GlobalEnv)
}
0
Peter Dieter