首页 文章

过滤掉所有值等于1的列

提问于
浏览
0

我有一个庞大的数据框架 . 我想过滤所有值等于1的列 .

这是我的数据的一个例子 .

A = c(1,2,3,4,5,6,1,1,1,1,1,1,2,3,1,4,5,6,1,1,1,1,1,1,2,3,4,1,3,3,1,1,1,1,1,1)
M  <- matrix(A, ncol = 6, nrow  = 6, byrow = F)


      [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    2    1    2    1
[2,]    2    1    3    1    3    1
[3,]    3    1    1    1    4    1
[4,]    4    1    4    1    1    1
[5,]    5    1    5    1    3    1
[6,]    6    1    6    1    3    1

期望的输出如下:

[,1] [,2] [,3]
[1,]    1    2    2
[2,]    2    3    3
[3,]    3    1    4
[4,]    4    4    1
[5,]    5    5    3
[6,]    6    6    3

我想使用dplyr或其他R函数的过滤函数 . 你知道我怎么能这样做吗?谢谢

2 回答

  • 1

    您可以使用 colMeans(M == 1) 获取等于 1 的每列的百分比,然后选择那些百分比不是 1 的列(即100%) .

    M[, colMeans(M == 1) != 1]
    
    #      [,1] [,2] [,3]
    # [1,]    1    2    2
    # [2,]    2    3    3
    # [3,]    3    1    4
    # [4,]    4    4    1
    # [5,]    5    5    3
    # [6,]    6    6    3
    

    如果你有一个数据框, dplyr 解决方案是使用 select_if

    library(dplyr)
    
    df %>% 
      select_if(~ any(. != 1))
    
    #   V1 V3 V5
    # 1  1  2  2
    # 2  2  3  3
    # 3  3  1  4
    # 4  4  4  1
    # 5  5  5  3
    # 6  6  6  3
    

    请注意,如果您的数据具有 NA 值,则 colMeansany 都有一个 na.rm 参数 .

  • 2

    不确定你的意思,我会同时提供 .

    Matrix

    M[, apply(M, 2, function(a) !all(a == 1)) ]
    #      [,1] [,2] [,3]
    # [1,]    1    2    2
    # [2,]    2    3    3
    # [3,]    3    1    4
    # [4,]    4    4    1
    # [5,]    5    5    3
    # [6,]    6    6    3
    

    Data Frame

    D <- as.data.frame(M)
    D[,sapply(D, function(a) !all(a == 1))]
    #   V1 V3 V5
    # 1  1  2  2
    # 2  2  3  3
    # 3  3  1  4
    # 4  4  4  1
    # 5  5  5  3
    # 6  6  6  3
    

相关问题