使用逻辑选择时,为什么NAs位于新创建的data.frame中?
我试图在R data.frame中去掉使用逻辑选择时,为什么NAs位于新创建的data.frame中?,r,dataframe,R,Dataframe,我试图在R data.frame中去掉NAs。在本例中,我试图创建一个新的df,它只包含集群为“texas”的行 > newdf <- df[df$cluster == "texas",] > summary(newdf$cluster) texas oklahoma NA's 510 0 719 >newdf摘要(newdf$cluster) 德克萨斯州俄克拉荷马州 510
NAs
。在本例中,我试图创建一个新的df,它只包含集群为“texas”的行
> newdf <- df[df$cluster == "texas",]
> summary(newdf$cluster)
texas oklahoma NA's
510 0 719
>newdf摘要(newdf$cluster)
德克萨斯州俄克拉荷马州
510 0 719
我已经找到了摆脱NAs的地址,但在本例中,我只选择了那些“集群”列等于“德克萨斯”的地址——NAs是如何实现的
有没有更好的方法来做我想做的事情?正如@MrFlick在上文中所建议的那样,
NA
值的处理方式会略有不同,具体取决于索引方式
测试数据:
dd <- data.frame(cluster=c("oklahoma","texas",NA))
原则上,您可以使用dd$cluster==“oklahoma”&!is.na(dd$cluster)
作为您的标准-因为FALSE&na
isFALSE
-但这相当尴尬。(因为我们已经指定了一个单列数据帧,没有说drop=FALSE
,所以结果在汇总之前会简化为一个向量。)
子集
有一个方便的属性,即它在标准计算结果为NA
的地方删除值。(此外,subset
始终返回数据帧,即使结果只有一列宽。)which()
只返回TRUE
值的索引,不返回NA
值的索引:
which(dd$cluster=="oklahoma")
## [1] 1
summary(dd[which(dd$cluster=="oklahoma"),])
## oklahoma texas
## 1 0
您可以执行df[which(df$cluster==“texas”),]
summary(subset(dd,cluster=="oklahoma"))
## cluster
## oklahoma:1
## texas :0
which(dd$cluster=="oklahoma")
## [1] 1
summary(dd[which(dd$cluster=="oklahoma"),])
## oklahoma texas
## 1 0