我在某些因子级别上对数据帧进行了分组,结果发现因子级别虽然评估为0值,但在某种程度上仍保留在过滤后的数据帧中,就好像它们保留在内存中一样。以下是一些说明性数据:
set.seed(121)
df1 <- data.frame(
Fac1 = rep(LETTERS[1:5], 2),
Fac2 = sample(letters[1:3], 10, replace = T),
Num = sample(1:20, 10)
)
df1
Fac1 Fac2 Num
1 A b 19
2 B c 15
3 C b 12
4 D c 3
5 E b 8
6 A b 5
7 B b 2
8 C b 9
9 D a 10
10 E a 13
现在我删除有值的所有行A
上Fac1
,并分别b
在Fac2
:
df2 <- df1[-which(df1$Fac1=="A" | df1$Fac2=="b"),]
一切看起来不错,这些值的行已从数据框中消失:
df2
Fac1 Fac2 Num
2 B c 15
4 D c 3
9 D a 10
10 E a 13
但是,如果我这样做table
,则因子水平仍然存在:
table(df2$Fac1)
A B C D E
0 1 0 2 1
如何能在不需要的因子水平从过滤数据框中取出为好?
你可以做:
table(droplevels(df2$Fac1))
B C D E
1 1 1 1
或应用于整个df:
df2 <- droplevels(df1[-which(df1$Fac1 == "A" | df1$Fac2 == "b"), ])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句