-2

我在 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。我究竟做错了什么?感谢帮助。

4

2 回答 2

1

您获得 NA 是因为您指的是不再位于mydata. 但是在任何情况下,您反复削减数据的想法都不是一个好主意,性能和代码清晰度都是明智的。试试这个:

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

在这里,您检查哪些行至少包含一次 value "NULL",然后删除这些行。

于 2013-03-05T20:16:38.390 回答
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所有因子列中都有 s,则进行编辑以做正确的事情。)

于 2013-03-05T20:29:12.310 回答