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

xt0899hw  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(189)

我有一个矩阵mat,它的元素是NA012。我得到了关于removing the columns with 0 or NA or both values的答案,但现在我想添加删除列的附加条件。
我必须删除包含相同值的列,删除NA或0或两者的列,NA或1或两者的列和NA或2或两者的列(我应该保留在其值变化的列)
我使用了这个代码,但没有正常工作:

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

bfhwhh0e1#

如果我正确理解了您的请求,您可以尝试:

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
c9qzyr3d

c9qzyr3d2#

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

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)]

相关问题