我有一个矩阵mat
,其元素为NA
,0
,1
,2
。我得到了关于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)]
感谢您的帮助
答案 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)]