【发布时间】:2015-10-04 08:21:46
【问题描述】:
如何避免 dcast() 输出中的NA 列reshape2 包?
在这个虚拟示例中,dcast() 输出将包含一个 NA 列:
require(reshape2)
data(iris)
iris[ , "Species2"] <- iris[ , "Species"]
iris[ 2:7, "Species2"] <- NA
(x <- dcast(iris, Species ~ Species2, value.var = "Sepal.Width",
fun.aggregate = length))
## Species setosa versicolor virginica NA
##1 setosa 44 0 0 6
##2 versicolor 0 50 0 0
##3 virginica 0 0 50 0
对于一个有点相似的用例,table() 确实有一个选项可以避免这种情况:
table(iris[ , c(5,6)], useNA = "ifany") ##same output as from dcast()
## Species2
##Species setosa versicolor virginica <NA>
## setosa 44 0 0 6
## versicolor 0 50 0 0
## virginica 0 0 50 0
table(iris[ , c(5,6)], useNA = "no") ##avoid NA columns
## Species2
##Species setosa versicolor virginica
## setosa 44 0 0
## versicolor 0 50 0
## virginica 0 0 50
dcast() 是否有类似的选项可以删除输出中的 NA 列?如何避免获得NA 列? (这个函数有许多相当神秘的选项,这些选项被严格记录下来,我无法完全掌握......)
【问题讨论】:
-
您可以使用
dcast(na.omit(iris), Species ~ Species2, value.var = "Sepal.Width"),但如果您也对其他一些专栏感兴趣,这不是非常通用的解决方案。 -
@DavidArenburg 确实如此。我知道
na.omit(iris)-like 解决方案,但我正在寻找一种不同的方法。我没有在问题中包含此要求,以避免使其过于混乱...... -
如果我不得不猜测,我会说这是预期的行为,因此您需要有意识地删除丢失的数据(而不是意外地这样做)。我会先选择数据来解决它,所以
iris[!is.na(iris$Species2),]. -
@Heroka 怎么会比
na.omit更好? -
@David 如果在某个列中只有 NA 需要删除。