我在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。我究竟做错了什么?感谢帮助。
答案 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
,则编辑正确的做法。)