【发布时间】:2011-03-31 07:33:50
【问题描述】:
我有一个包含 251 个观察值和 45 个变量的数据框。数据框中间有 6 个观察值,我想从我的分析中排除。所有 6 个都属于一个因子的一个级别。很容易生成一个新的数据框,当打印出来时,它似乎排除了 6 个观察值。但是,当我使用新数据框按相关因素绘制变量时,图中仍包含所谓的排除水平(无观察)。使用 str() 确认该级别仍然以某种形式存在。此外,新数据框的索引会跳过之前观测值所在的 6 个值。
如何创建一个排除 6 个观测值且在绘图时不继续识别排除因子水平的新数据框?是否可以使新数据框“重新索引”,以便新索引不会跳过以前分配给排除因子级别的值?
我提供了一个虚构数据的示例:
# ---------------------------------------------
# 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)
# ---------------------------------------------
【问题讨论】:
-
这是我避免瘟疫等因素的原因
-
如果您不想要这种行为,请不要使用因子。
标签: r