在数据框的选定列中包含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)),]