【问题标题】:R matrix: How can I subset based on the sum across all columns?R矩阵:如何根据所有列的总和进行子集化?
【发布时间】:2020-07-20 18:42:55
【问题描述】:

我有一个非常大的矩阵,>30,000 个元素。我想删除所有列中值为 0 的所有行。看了很多帖子,我觉得标准差=0或者行数之和=0这样的参数可以去掉。我似乎无法找出一个有效的 R 代码来做到这一点。子集命令很有意义......我将不胜感激任何帮助或建议。

另一种可行的方法:

我运行as.logical(rowSums(matrix !=0)) 以返回所有值不为 0 的行,这有效。是否可以添加另一行来创建一个仅包含返回 TRUE 的行的新矩阵?

【问题讨论】:

    标签: r subset rows


    【解决方案1】:

    我们可以在逻辑矩阵上使用rowSums,创建一个逻辑vector 并将matrix 的行子集

    m2 <- m1[!!rowSums(m1 != 0),]
    

    数据

    m1 <- rbind(0, c(1, 3, 2), c(0, 1,2), c(4, 5, 2))
    

    【讨论】:

    • c( ) 中的值是什么?
    • @Emily 这只是为测试创建一个可重现的示例
    • @akrun 是的,这将返回一个矩阵,并且您的第一个代码确实消除了全零的第一行。这是我需要的,但对于我的矩阵它不起作用。
    • @Emily 没有一个可重复的小例子,我不清楚你的数据结构等。
    • @Emily 您的新条件是 &gt; 1 这意味着,它正在寻找大于 1 的值。我假设您的数据集中没有值 0
    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 2018-08-07
    • 2021-04-29
    • 2020-09-24
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多