首页 > 解决方案 > 过滤掉所有值都等于 1 的列

问题描述

我有一个巨大的数据框。我想过滤所有值都等于 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 函数中的过滤器函数。你知道我该怎么做吗?谢谢

标签: rfilterdplyrsubset

解决方案


您可以使用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

请注意,如果您的数据具有值,则colMeans两者any都有一个na.rm可以使用的参数。NA


推荐阅读