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
dfrm <- dfrm[c("piglet", "ssire", "dam", "tdate")]
OU:
dfrm <- dfrm[ , c("piglet", "ssire", "dam", "tdate")]
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
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")))
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"))
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)
}