我有一个包含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)
# ---------------------------------------------
Run Code Online (Sandbox Code Playgroud)
您可以使用gdata包中的drop.levels()函数将因子级别降低到实际使用的级别 - 在创建新的列后将其应用于列.data.frame
也可以在这里尝试搜索r和drop.levels(但是你需要创建[r] drop.levels我不能在这里干扰格式逻辑的搜索词).