r - 在对称数据框中删除满足条件的行和列

标签 r dataframe subset tidyverse

设置

我的任务看起来类似于 this one但不完全是。假设我有一个看起来像这样的对称数据框

df <- data.frame(
    matrix(c(1, 7, 0, 5, 9, 0,
             7, 4, 0, 8, 2, 0, 
             0, 0, 0, 0, 0, 0, 
             5, 8, 0, 1, 1, 0, 
             9, 2, 0, 1, 1, 0, 
             0, 0, 0, 0, 0, 0), nrow=6, ncol=6)
)

看起来像这样

  X1 X2 X3 X4 X5 X6
1  1  7  0  5  9  0
2  7  4  0  8  2  0
3  0  0  0  0  0  0
4  5  8  0  1  1  0
5  9  2  0  1  1  0
6  0  0  0  0  0  0

因为如果一行全为零是对称的,那么具有相同索引的对应列也将全为零。

我想做什么

我想删除所有只包含零的行和列(通常,我想删除所有满足某些条件的行和列)。理想情况下,我想在 tidyverse 中使用函数。如果我能以某种方式使用管道,那就太好了。

可以用管道来做吗?

重要

我犯了一个错误,我认为解决方案必须适用于稀疏矩阵。是否可以有一个适用于 dgCMatrix 类的实现? IE。对于稀疏矩阵?

当我尝试下面的许多 tidyverse 实现时,我得到了

Error in UseMethod("tbl_vars") : 
  no applicable method for 'tbl_vars' applied to an object of class "c('dgCMatrix', 'CsparseMatrix', 'dsparseMatrix', 'generalMatrix', 'dCsparseMatrix', 'dMatrix', 'sparseMatrix', 'compMatrix', 'Matrix', 'xMatrix', 'mMatrix', 'Mnumeric', 'replValueSp')"

最佳答案

你可以这样做:

df %>%
 select_if(~ any(. != 0)) %>%
 filter_all(any_vars(. != 0))

  X1 X2 X4 X5
1  1  7  5  9
2  7  4  8  2
3  5  8  1  1
4  9  2  1  1

关于r - 在对称数据框中删除满足条件的行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59556229/

相关文章:

python - 'reticulate' r-package 导入 python 脚本时出错

r - 如何在数据框中将因子标签更改为字符串

r - 如何基于grep覆盖R中的变量

python - 数据框的原始值没有变化

r - 替代 R 中的子集?

algorithm - 维护一组最小的子集

r - 无法在 ggplot2 上绘制比例尺或指北针

r - 从列表元素的成对组合构建数据框

python - 增加行中条件值的计数

git - 维护开发分支,其中一个分支是另一个分支的子集