在数据框的选定列中包含NA(缺失)值的行的子集

我们有一个CSV文件的数据框。 dataframeDF具有包含观测值的列和包含已经进行测量的date的列( VaR2 )。 如果未loggingdate,则CSV文件包含缺失数据的值NA

 Var1 Var2 10 2010/01/01 20 NA 30 2010/03/01 

我们希望使用subset命令定义一个新的dataframenew_DF ,使得它只包含来自列( VaR2 )的具有NA'值的行。 在给出的例子中,只有第2行将被包含在新的DF

命令

 new_DF<-subset(DF,DF$Var2=="NA") 

不起作用,结果数据框没有行条目。

如果在原始的CSV文件中NA值与NULL交换,则相同的命令会产生所需的结果: new_DF<-subset(DF,DF$Var2=="NULL")

如何获得这个方法的工作,如果string的价值NA提供原始CSV文件?

切勿使用==“NA”来testing缺失值。 使用is.na()来代替。 这应该做到这一点:

 new_DF <- DF[rowSums(is.na(DF)) > 0,] 

或者如果你想检查一个特定的列,你也可以使用

 new_DF <- DF[is.na(DF$Var),] 

如果您有NA字符值,请先运行

 Df[Df=='NA'] <- NA 

用缺失的值代替它们。

NA是R中的一个特殊值,不要将NA值与“NA”string混淆。 根据数据导入的方式,您的“NA”和“NULL”单元格可能是各种types的(默认行为是将“NA”string转换为NA值,并使“NULL”string原样)。

如果使用read.table()或read.csv(),则应该考虑“na.strings”参数来执行干净的数据导入,并始终使用真实的R NA值。

一个例子,在“NULL”和“NA”两种情况下工作:

 DF <- read.csv("file.csv", na.strings=c("NA", "NULL")) new_DF <- subset(DF, is.na(DF$Var2)) 

当一行中的所有值都不是NA时, complete.cases会给出TRUE

 DF[!complete.cases(DF), ] 

用NA数据打印所有行:

 tmp <- data.frame(c(1,2,3),c(4,NA,5)); tmp[round(which(is.na(tmp))/ncol(tmp)),] 
Interesting Posts