为什么tapply()会显示我过滤掉的条目? [重复]

问题描述 投票:2回答:1

这个问题在这里已有答案:

我已经采用了虹膜data.frame,然后过滤掉了物种中的“setosa”。

当我做tapply()时,它给了我最初在该专栏中的所有3件事情的摘要。为什么它会让我看到setosa为NA。它不应该知道塞托萨!

library(dplyr)
a <-filter(iris, Species != "setosa")

tapply(a$Sepal.Length, a$Species, mean)

结果:

    tapply(a$Sepal.Length, a$Species, mean)   
 #  setosa versicolor  virginica    
 #      NA      5.936      6.588

我错过了什么?

r
1个回答
3
投票

这是因为在过滤后的数据框中,列Species仍然是3个级别的因子,即使列中只有2个级别。您可以使用droplevels删除未使用的级别:

library(dplyr) 
a <- droplevels(filter(iris, Species != "setosa"))
tapply(a$Sepal.Length, a$Species, mean)
# versicolor  virginica 
#      5.936      6.588 
© www.soinside.com 2019 - 2024. All rights reserved.