【问题标题】:dplyr filter data.frame with multiple criteria具有多个条件的 dplyr 过滤器 data.frame
【发布时间】:2020-04-17 18:02:03
【问题描述】:

我有带有列的数据框。我想返回一个通过多个条件从原始数据框过滤掉的子数据框。我的第一个问题是我想按两列过滤:一列包含离散值,我想过滤包含值“Open”的行。另一列包含日期值,我想复合过滤等于给定日期的行

这是我的过滤功能,使用 dplyr

agendaReq <- function(recTable, agendaDate)
{

  openTable <- filter(recTable, recTable$reqStatus == "Open") 
  agendaTable <- filter(openTable, recTable$reqDate == agendaDate)
  return (agendaTable)

}

但是,当我在我的服务器中调用此函数时,如下所示

agendaToShow <- agendaReq(recordTable_CA, Sys.Date())

我收到了这个错误

Warning: Error in : Result must have length 14, not 16
  56: <Anonymous>
Error : Result must have length 14, not 16

原始数据框中有 16 行。正确的过滤器应该给我 14 行。但是这个错误是什么意思呢?

最后,对于离散变量和连续变量的混合,我该如何做同样的事情? (比如,根据性别、身高等进行过滤……)

谢谢

【问题讨论】:

  • 不要在 dplyr 动词函数中使用recTable$,直接使用列名。在dplyr.tidyverse.org 阅读教程和小插曲可能会有所帮助。
  • See here 提出一个人们可以帮助解决的 R 问题。这包括数据样本和所有必要的代码。
  • 感谢来源。我去看看。

标签: r dplyr


【解决方案1】:

如果没有一个小的可重复数据示例,很难确定它是否有效,但您是否尝试过:

library(dplyr)
recTable %>% filter(reqStatus == "Open" & reqDate == agendaDate)

如果这不起作用,请考虑提供可重现的数据示例,如下所述:How to make a great R reproducible example

【讨论】:

  • 我经常在 &amp; 的 R 惯用逻辑和 filter(reqStatus == "Open", reqDate == agendaDate) 的隐式“和”的 dplyr-惯用方式之间纠结。当然,它们都可以工作,并且没有直接的dplyr-“或”的惯用方式,因此&amp; 的显式使用可能提供了一致的声明方式。 *耸耸肩*
  • 实际上,我不知道filter(reqStatus == "Open", reqDate == agendaDate) 也在工作;)感谢您指出这一点。我喜欢&amp;,因为它真的很容易理解(相反,我讨厌%in%,即使知道它非常有用,我也记不住)
  • %in% 在这里不需要,尽管它也可以工作。至于逗号分隔,它用于dplyr.tidyverse.org/reference/filter.html(和?filter)的许多示例中。
  • 很高兴知道! (我并没有提到当前响应的 %in% ,而是作为我觉得奇怪使用的那种符号的一个例子。但你是对的,它不在焦点范围内)
  • 谢谢。这行得通。另外,我发现我的代码有什么问题。在第二个过滤器中,我应该使用openTable$reqDate 而不是原始表。但是您的解决方案要好得多。
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 2017-10-11
  • 2017-05-06
  • 2020-12-02
  • 2013-01-18
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多