【问题标题】:delete the colmuns which are contained just NA or 0 or both values [duplicate]删除仅包含 NA 或 0 或两个值的列[重复]
【发布时间】:2015-07-15 03:03:29
【问题描述】:

如果我想删除仅包含 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

【问题讨论】:

标签: r


【解决方案1】:

您可以使用沿列的应用功能过滤掉列。

您只需使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2014-11-13
    • 2021-08-21
    • 2016-07-10
    • 2021-03-06
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多