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

时间:2011-11-02 12:53:11

标签: r csv dataframe subset na

我们有一个CSV文件的数据框。数据框DF包含包含观察值的列和包含测量日期的列(VaR2)。如果未记录日期,则CSV文件包含值NA,用于缺少数据。

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

我们希望使用subset命令来定义新数据框new_DF,使其仅包含列(NA')中具有VaR2值的行。在给出的示例中,只有第2行将包含在新DF中。

命令

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

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

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

如果对于字符串,原始CSV文件中提供了值NA,如何使此方法有效?

6 个答案:

答案 0 :(得分:125)

切勿使用=='NA'来测试缺失值。请改用is.na()。这应该这样做:

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

或者如果您想检查特定列,也可以使用

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

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

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

用缺少的值替换它们。

答案 1 :(得分:36)

NA是R中的特殊值,不要将NA值与“NA”字符串混淆。根据导入数据的方式,“NA”和“NULL”单元格可能是各种类型(默认行为是将“NA”字符串转换为NA值,并按“NULL”字符串)。

如果使用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))

答案 2 :(得分:24)

当行中的所有值都不是complete.cases时,

TRUENA

DF[!complete.cases(DF), ]

答案 3 :(得分:5)

new_data <- data %>% filter_all(any_vars(is.na(.))) 

这应该创建一个新的数据框(new_data),其中仅缺少值。

最好跟踪一些以后可能会丢失的值,因为它们的某些列缺少观测值(NA)。

答案 4 :(得分:3)

尝试更改此内容:

new_DF<-dplyr::filter(DF,is.na(Var2)) 

答案 5 :(得分:-1)

使用NA数据打印所有行:

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