2

这是一个示例:

x = data.frame(x1=1:3, x2=2:4, x3=3:5)
x
#   x1 x2 x3
# 1  1  2  3
# 2  2  3  4
# 3  3  4  5
x[2, 1] = NA
x[3, 2] = NA
complete.cases(x)
# [1]  TRUE FALSE FALSE
x[complete.cases(x), , drop=FALSE]
#   x1 x2 x3
# 1  1  2  3

如果我想过滤完整的变量(列)而不是完整的案例怎么办?在上面的示例中,它应该类似于:

x[,3,drop=FALSE]
#   x3
# 1  3
# 2  4
# 3  5
4

5 回答 5

5

或者是这样的:

 x[, complete.cases(t(x)), drop=FALSE] # Tks Simon
于 2013-05-02T14:42:11.260 回答
4

你可以这样做:

R> x[,sapply(x, function(v) sum(is.na(v))==0), drop=FALSE]
  x3
1  3
2  4
3  5
于 2013-05-02T14:39:53.520 回答
1

您可以使用sapply该结果检查列中的缺失值和子集:

x[sapply(x,function(y) !any(is.na(y)))]
  x3
1  3
2  4
3  5
于 2013-05-02T15:33:07.077 回答
0

我敢肯定这里有一个更清洁的策略,但我认为以下功能也可以工作:

x = data.frame(x1=1:3, x2=2:4, x3=3:5)
x[2, 1] = NA
x[3, 2] = NA

complete.cols = function(dat){   
  non.missing.test = apply(dat,2,function(t){sum(is.na(t))==0})
  dat.complete.cols = data.frame(dat[,which(non.missing.test == TRUE)])
  names(dat.complete.cols) = names(dat)[which(non.missing.test == TRUE)]
  return(dat.complete.cols)
}

complete.cols(x)
于 2013-05-02T14:34:47.430 回答
0

这个小功能应该可以工作:

for (a in c(1:length(x))){
    ifelse(TRUE%in%is.na(x[,a]),print ('INCOMPLETE'),print ('COMPLETE'))
}
于 2013-05-02T14:48:16.583 回答