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)
# ---------------------------------------------
C'est une des raisons pourquoi je éviter de facteurs comme la peste
Si vous ne voulez pas ce problème, n'utilisez pas de facteurs.

OriginalL'auteur Steve | 2010-08-18