删除仅包含NA或0或两个值的colmuns

时间:2015-07-15 03:03:29

标签: r

如果我想删除仅包含0或NA或两个值的列,我该怎么办?

mat <- structure(c(0L, 0L, 1L, 0L, 2L, 0L, 0L, 0L, NA, 0L, 0L, 0L, 0L,
0L, 2L, 0L, 0L, NA, 0L, 0L, 0L, 1L, 0L, 0L, NA, 0L, NA, 0L, 0L,
0L, 0L, NA, 0L, 2L, 0L, 0L), .Dim = c(6L, 6L), .Dimnames = list(
c("A05363", "A05370", "A05380", "A05397", "A05400", "A05426"), c("X1.110590170", "X1.110888172", "X1.110906406", "X1.110993854", "X1.110996710", "X1.111144756")))

我的输出应该是这样的:

        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 :(得分:1)

您可以使用列上的apply函数过滤掉列。

您只需使用all函数来确保列中的all值满足逻辑:is.na(x) | x == 0

filter_cols <- apply(mat, 2, function(x) !all(is.na(x) | x == 0))
mat[,filter_cols]
#'         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