删除0或NA中的列或R中的相同值?

时间:2015-07-16 14:47:51

标签: r

我有一个矩阵mat,其元素为NA012。我得到了关于removing the columns with 0 or NA or both values的答案,但现在我想添加删除列的附加条件 我必须删除包含相同值的列,删除NA或0或两者的列,NA或1或两者的列以及NA或2或两者的列(我应保留其中包含NA的列价值观)

我使用了此代码,但无法正常工作:

  mat_nonNA <- mat[, !apply((is.na(mat) | mat == 0) & (is.na(mat) |  
                 mat==1) &(is.na(mat) |  mat==2), 2, all)]

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

如果我理解您的要求,您可以尝试:

mat_nonNA <- mat[, apply(mat, 2, function(x){length(unique(x[!is.na(x)])) > 1})]

它会查找具有1个以上不同非NA值的列。

结果是:

mat_nonNA
#       X1.110590170 X1.110906406 X1.110993854 X1.111144756
#A05363            0            0            0            0
#A05370            0            0            0           NA
#A05380            1            2            0            0
#A05397            0            0            1            2
#A05400            2            0            0            0
#A05426            0           NA            0            0

答案 1 :(得分:0)

我很确定你可以直接做到这一点,但很难理解这么复杂的情况。相反,首先尝试单独评估条件:

zeroOrNA <- apply(is.na(mat) | mat == 0, 2, all)
oneOrNA <- apply(is.na(mat) | mat == 1, 2, all)
twoOrNA <- apply(is.na(mat) | mat == 2, 2, all)

mat_nonNA <- mat[ , !(zeroOrNA | oneOrNA | twoOrNA)]