如何从包含来自数据框的NULL值的因子列中剔除观察结果

时间:2013-03-05 20:04:41

标签: r dataframe

我在R中有一个有74列的数据框。这些列中的60列是因子,而其余列包含连续数据。在作为因子的列中,其中一些包含NULL作为其中一个级别。我想删除所有可能包含NULL值的观察结果。每个观察都有一个ID列,其中包含唯一的识别号。我一直在使用以下代码片段:

x <- mydata[which(mydata$column2 == "NULL"), ]
mydata <- mydata[!mydata$ID %in% x$ID, ]

但是当我以下列方式反复使用它时:

x <- mydata[which(mydata$column3 == "NULL"), ]
mydata <- mydata[!mydata$ID %in% x$ID, ]

我开始在数据框中获取NA。我究竟做错了什么?感谢帮助。

2 个答案:

答案 0 :(得分:1)

您正在获取NAs,因为您指的是不再位于mydata的行。但无论如何,你反复削减数据的想法并不是一个明智的性能和代码清晰度。试试这个:

mydata<-mydata[!apply(mydata,1,function(x) any(x=="NULL")),]

在此处检查哪些行至少包含一次值"NULL",然后删除这些行。

答案 1 :(得分:0)

我可能会这样做:

# identify the factor columns
factor.cols <- sapply(mydata, is.factor)

# for each row, count how many factor columns contain "NULL"
null.count <- rowSums(mydata[factor.cols]=="NULL")

# keep only those rows with no "NULL" factor values,
# along with rows where all factor values are NA
mydata[is.na(null.count) | null.count==0,]

(如果特定行在所有因子列中都有NA,则编辑正确的做法。)