我试图摆脱R data.frame中的NAs
。我试图创建一个新的df,其中只包含其群集为" texas"在这个例子中。
> newdf <- df[df$cluster == "texas",]
> summary(newdf$cluster)
texas oklahoma NA's
510 0 719
我找到other questions解决了NAs的问题,但在这种情况下,我只选择那些&#34; cluster&#34;列等于&#34;德克萨斯&#34; - NAs是怎么来的?
有没有更好的方法来做我想要的事情?
答案 0 :(得分:3)
正如@MrFlick建议的那样,NA
值会以略微(微妙?)不同的方式处理,具体取决于您的索引方式。
测试数据:
dd <- data.frame(cluster=c("oklahoma","texas",NA))
TRUE
值选择相应的值,FALSE
删除它,NA
结果为NA
dd$cluster=="oklahoma"
## [1] TRUE FALSE NA
summary(dd[dd$cluster=="oklahoma",])
## oklahoma texas NA's
## 1 0 1
原则上,您可以使用dd$cluster=="oklahoma" & !is.na(dd$cluster)
作为标准 - 因为FALSE & NA
是FALSE
- 但这很尴尬。 (由于我们已经指定了单列数据框,而没有说drop=FALSE
,因此在汇总之前将结果简化为向量。)
subset
具有便捷的属性,可以在标准评估为NA
时删除值。 (另外,subset
总是返回一个数据框,即使结果只有一列宽。)summary(subset(dd,cluster=="oklahoma"))
## cluster
## oklahoma:1
## texas :0
which()
仅返回TRUE
值的索引,而非NA
值:
which(dd$cluster=="oklahoma")
## [1] 1
summary(dd[which(dd$cluster=="oklahoma"),])
## oklahoma texas
## 1 0