Supprimer les lignes d'un dataframe qui correspondent à un niveau de facteur (et ensuite de tracer les données en excluant ce facteur niveau)
J'ai un bloc de données avec 251 observations et 45 variables. Il y a 6 observations dans le milieu de la trame de données que j'aimerais exclure de mes analyses. Tous les 6 appartiennent à un niveau d'un facteur. Il est facile de générer un nouveau bloc de données qui, lors de l'impression, semble exclure l'6 observations. Lorsque j'utilise le nouveau bloc de données à la parcelle des variables par le facteur en question, toutefois, le soi-disant exclus niveau est toujours inclus dans l'intrigue (sans observation). À l'aide de str() confirme que le niveau est toujours présent dans une certaine forme. Aussi, l'indice pour le nouveau bloc de données saute de 6 valeurs où les observations autrefois résidé.
Comment puis-je créer un nouveau bloc de données qui exclut les 6 observations et de ne pas continuer à reconnaître les exclus niveau du facteur lors de la représentation? Le nouveau bloc de données à être "re-index", de sorte que le nouvel indice ne pas ignorer des valeurs précédemment affectée à l'exclu niveau de facteur?
J'ai donné un exemple avec des données:
# ---------------------------------------------
# data
char <- c( rep("anc", 4), rep("nam", 3), rep("oom", 5), rep("apt", 3) )
a <- 1:15 / pi
b <- seq(1, 8, .5)
d <- rep(c(3, 8, 5), 5)
dat <- data.frame(char, a, b, d)
dat
# two ways to remove rows that contain a string
datNew1 <- dat[-which(dat$char == "nam"), ]
datNew1
datNew2 <- dat[grep("nam", dat[ ,"char"], invert=TRUE), ]
datNew2
# plots still contain the factor level that was excluded
boxplot(datNew1$a ~ datNew1$char)
boxplot(datNew2$a ~ datNew2$char)
# str confirms that it's still there
str(datNew1)
str(datNew2)
# ---------------------------------------------
Si vous ne voulez pas ce problème, n'utilisez pas de facteurs.
OriginalL'auteur Steve | 2010-08-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
drop.levels()
fonction de la gdata paquet de réduire le facteur de niveaux jusqu'à la effectivement utilisés -- l'appliquer sur votre colonne après avoir créé le nouveaudata.frame
.Également essayer de rechercher r-déposer.les niveaux ici (mais vous avez besoin pour rendre le terme de recherche
[r] drop.levels
que je ne peux pas ici, car il interfère avec la logique de mise en forme).OriginalL'auteur Dirk Eddelbuettel
De commencer avec la version R version 2.12.0, il y a une fonction
droplevels
, qui peut être appliqué à facteur de colonnes ou de l'ensemble du dataframe. Lorsqu'il est appliqué à la dataframe, il va supprimer zéro-nombre niveaux de tous les facteur de colonnes. Donc votre exemple simple:OriginalL'auteur chronos
J'ai collé dans mon code j'ai une enceinte expérience dans un lac - avoir des mesures de boîtiers et le lac, mais la plupart ne veulent pas traiter avec le lac:
ma variable est appelée "t.niveau" et les niveaux de contrôle, faible moyen élevé et le lac
-ce code permet d'utiliser le nolk$ data=nolk pour obtenir des données sans le "lac"..
%in%
dans la première ligne etdroplevels
dans le second.OriginalL'auteur paul