r - 过滤掉所有值都等于 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 函数中的过滤器函数。你知道我该怎么做吗?谢谢
解决方案
您可以使用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
推荐阅读
- directx - 使用初始数据 DirectX 11 创建纹理
- flutter - 如何使用 Flare 动画作为带有淡入动画的图像占位符
- python - 根据 Pandas 中的时间序列创建月 x 年的数据框
- delphi - Delphi 表单命名约定
- c++ - RenderDoc 在调试 Vulkan 时不显示缓冲区内容
- reactjs - 在现代页面上使用带有 SPFx webpart 的 office-ui-fabric 面板时出现问题
- flutter - 如何使用 disqus 登录我的移动应用程序?
- java - 在 Ubuntu 上运行 JAR 时无法找到或加载主类
- c# - 内存扫描仪信息
- python - Python中的字典理解