当前位置: 首页 > 知识库问答 >
问题:

根据 R 中跨列出现的 2 次或更多次筛选行

郭元明
2023-03-14

我正在尝试过滤掉仅在单个列中出现的行,并仅显示出现在多个列中的行。

一个示例数据库:

在这种情况下,我希望我的过滤器只返回行2和行3。我一直在尝试使用dplyr和过滤器功能;虽然我还没有找到一种方法来捕捉所有7列。我无法使用< code>rowSums(),因为在这种情况下,实际值并不重要,重要的是另一列旁边的频率。

到目前为止,当专门比较两列的值时,我只准确地捕捉到了我正在寻找的输出

mydata.df %>%
  filter(col1>0 & col2>0)

尽管很容易理解为什么这种方法不可行,尤其是在7列中进行比较。我尝试了串接多个条件以在多个列之间进行比较,但没有成功。除了为每个列的组合单独编写一个过滤器之外,我确信我缺少了一个明显而简单的解决方案?

共有1个答案

咸昊昊
2023-03-14

我们可以将过滤器rowSums一起使用

library(dplyr)
mydata.df %>% 
   filter(rowSums(. > 0) >=2)
     col1 col2 col3 col4 col5 col6 col7
row2    6    0   42    0    0    0    0
row3    0    0    0    0    1    1    0

或者,如果我们正在检查的是列的成对组合

library(purrr)
mydata.df %>% 
    filter(combn(., 2, FUN = function(x) rowSums(x > 0) == 2, 
         simplify = FALSE) %>% 
      reduce(`|`))
     col1 col2 col3 col4 col5 col6 col7
row2    6    0   42    0    0    0    0
row3    0    0    0    0    1    1    0
mydata.df <- structure(list(col1 = c(1L, 6L, 0L, 0L), col2 = c(0L, 0L, 0L, 
0L), col3 = c(0L, 42L, 0L, 0L), col4 = c(0L, 0L, 0L, 0L), col5 = c(0L, 
0L, 1L, 0L), col6 = c(0L, 0L, 1L, 0L), col7 = c(0L, 0L, 0L, 87L
)), class = "data.frame", row.names = c("row1", "row2", "row3", 
"row4"))
 类似资料:
  • 问题内容: 我有一个问题,如果我有一排像这样 我如何将其分成三行,如下所示: / J 问题答案: 您可以使用递归CTE: SQLFiddleDEMO 编辑: 基于Marek Grzenkowicz的回答和MatBailie的评论,全新的想法: 生成从1到max(qty)的数字,并在其上加入表。 SQLFiddle演示

  • 问题内容: 我在Intranet服务器中启用了ssl的站点。它具有有效CA颁发的正式服务器证书。但是它自上个月以来已经过期。我使用USB A3令牌访问它。由于它已过期,因此我为其创建了一个安全例外。如果我使用Firefox,一切正常。 问题是当我尝试使用Chrome访问它时。首次访问时,它会正确提示我令牌密码,然后是证书选择对话框。但是之后,它会在我输入的每个页面上继续显示认证选择弹出窗口(而不是

  • 问题内容: 我有两个清单如下 和 我试图找出在每个列表中出现最多的值。这就是我尝试过的。 我已经走了这么远,但我想不出如何在删除列表中的所有值之前停止的方法。 问题答案: 如果要查找列表中每个元素的出现,可以使用from的模块:- 因此,前两个元素在您的列表中最常见。 或者,您还传递参数来指定所需的元素数:- 更新:- 您也可以先找出计数,然后再找到具有该值的元素总数,然后可以将其用作参数:-

  • 本文向大家介绍找出数组中只出现1次的数,其余数均出现2次,扩展,其余数出现2次以上相关面试题,主要包含被问及找出数组中只出现1次的数,其余数均出现2次,扩展,其余数出现2次以上时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 位运算题目, 位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因

  • 问题内容: 我的sql查询获取固件的错误修复验证列表,例如def-456是一张票,要求我对产品进行固件测试。def-456有几个子任务,记录结果。结果记录为:id:abc-123,abc-124,abc-125等(如下表所示)。这些对应的ID的结果为“通过”或“失败”。我需要计算两个值----> 1.尝试次数:在以下示例中,尝试次数将为3/5,有3次通过和2次失败(即通过/通过+失败),在这里我可

  • 问题内容: 我遵循Presentation Model模式对一些屏幕进行编码。 我把一些豆子放在一个 我将在中显示此列表的内容,这要归功于 我还想同时在组合框(以表单的形式)中显示此列表中的 某些记录* , 并同时 在JList中显示 其他 记录。 *** 这三个屏幕(及其模型)彼此独立 如何管理在我的列表中添加{一个或多个} /删除{一个或多个}并在各处实时查看更改? 我将要编写自己的Obser

  • 问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案。 为了演示,先假设你有一个单词列表并且想找出哪个单词出现频率最高。你可以这样做: words = [ 'look', 'into', 'my', 'eyes', 'look', 'into',