Existe-t-il un moyen de sélectionner toutes les colonnes d'un cadre de données, à l'exception d'une colonne portant un nom particulier?.
Ce serait l'analogue de df[, -1]
, sauf en utilisant le nom de la colonne au lieu de l'index?
Vous pouvez le faire en utilisant un sous-ensemble vectoriel. Commencez par créer un jeu de données factice:
R> dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
Puis utilisez l'opérateur !
pour inverser la sélection:
R> dd[ ,!(colnames(dd) == "A")]
B C D
1 1 1 1
2 2 2 2
3 3 3 3
Alternativement, vous pourriez avoir:
Une version légèrement plus courte (avec la permission de @Tomas):
dd[ , names(dd) != "A"]
Faire face à plusieurs colonnes (avec la permission de @Tyler)
dd[ ,!(colnames(dd) %in% c("A", "B"))]
On pourrait utiliser la fonction which()
pour identifier la colonne à éliminer.
dd <- data.frame(A = 1:5, B = 1:5, C=1:5)
dd[, -which(names(dd) == "A")]
ou positivement
dd[, which(names(dd) != "A")]
Cependant, s'il n'y a pas de colonne nommée "A", vous obtiendrez un cadre de données avec 0 colonnes et nrow(dd)
lignes. Donc, il serait bon de vérifier l'existence d'une colonne nommée "A".
if(any(names(dd) == "A")) {
dd[, which(names(dd) != "A")]
}
La fonction subset
permet déjà ce type de syntaxe, à partir des exemples de la page d'aide:
subset(airquality, Day == 1, select = -Temp)
Pour désélectionner plusieurs colonnes, vous pouvez utiliser le package dplyr. Par exemple:
dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
library(dplyr)
newdd <- select(dd, -A,-C)
c'est une autre manière que celle suggérée par @csgillespie.
supprimer A et C
base
solutiondf <- data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
df[,c("A","C")]<-NULL
data.table
solutiondt <- data.table(A = 1:3, B = 1:3, C=1:3, D=1:3)
# A B C D
# 1: 1 1 1 1
# 2: 2 2 2 2
# 3: 3 3 3 3
dt[,c("A","C"):=NULL]
# B D
#1: 1 1
#2: 2 2
#3: 3 3