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类的实现吗?即稀疏矩阵?

当我尝试下面的许多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/

相关文章:

使用单个命令运行具有不同参数的函数列表

mysql - (按位)MySQL 中的超集和子集

algorithm - 查找一组值的所有唯一子集

algorithm - 子集和 - 恢复解决方案

Python pandas 数据帧分割

r - 在 ggplot2 中为 geom_label 设置 "basic size",以便最小值仍然可读

重新格式化数值而不强制转换为字符

r - 在R中查找html表名并抓取

python - Pandas:无法安全地将传递的用户数据类型 int32 转换为 float64

python - 有没有办法在数据框中找到每月最后一天的值