我有一個包含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)
# ---------------------------------------------
這是一個原因,我避免的因素像瘟疫 – 2010-08-18 02:37:49
如果不希望這種行爲,不使用的因素。 – hadley 2010-08-18 12:16:32