【问题标题】:Selecting a subset of data based multiple filters [duplicate]选择基于多个过滤器的数据子集[重复]
【发布时间】:2019-03-02 18:03:20
【问题描述】:

我正在尝试获取更大的 Movies 数据框的子集,并且我想选择来自美国且在 2 个日期之间的年份的所有电影。

我已经写了这个声明:

usMoviesInRange <- movies %>% filter(country == "USA") %>% between(year, 1986, 2016)

但我收到一条错误消息,

(., year, 1986, 2016) 之间的错误:未使用的参数 (2016)

有人可以帮助我了解这里发生了什么或我做错了什么吗?

【问题讨论】:

  • between 返回一个逻辑值。您需要执行以下操作:nycflights13::flights[between(nycflights13::flights$month,1,4),] 或在filter 中使用它:nycflights13::flights %&gt;% filter(carrier=="UA",between(month,1,4))
  • 只需在filter 中使用betweenfilter(country == "USA" &amp; between(year, 1986, 2016))

标签: r dplyr filtering


【解决方案1】:

你没有正确使用between(x, left, right)

试试这个

library(tidyverse)
movies <- tibble(country = c("USA", "France", "USA", "USA", "USA"),
                 year =    c( 2000,     1995,  1935,  2019,  1990))
usMoviesInRange <- movies %>% 
  filter(country == "USA") %>% 
  filter(year %>% 
           between(1986, 2016)
        )
usMoviesInRange

给予

# A tibble: 2 x 2
  country  year
  <chr>   <dbl>
1 USA      2000
2 USA      1990

【讨论】:

  • 很好奇你为什么使用额外的过滤器和管道。为什么不直接将其添加到第一个过滤器中?
  • 没有特别的原因 - 我只是尝试修复代码,这是第一个起作用的。或者我可以使用 filter(between(year, 1986, 2016)),就像 Lunalo John 在我之后几分钟所做的那样 - R 的好处是有几种方法可以做同样的事情
  • 真实故事——我只是好奇。我还在学习,所以有时像这样的小事情背后的意图比我意识到的要多。感谢您的跟进!
【解决方案2】:

我强烈推荐这个选项,你可以给dplyr::filter添加多个参数

usMoviesInRange = movies %>% 
    filter(country %in% "USA", 
           year > 1986, 
           year < 2016)

如果你使用dplyr::between,你必须这样使用它:

country[between(x = country$year, left = 1986,right =  2016),]

希望对你有帮助,

【讨论】:

  • 要添加到@danguloa,似乎在 sreturn 布尔值之间,这就是必须索引的原因。示例:x &lt;- data.frame(C = c('US','US','MEX'), year = c(2015,2017,2019)) x %&gt;% between(year, 2015, 2017)
  • 谢谢你,我来自 C# 背景,所以其中一些对我来说很有意义,但符号让我很困惑。
【解决方案3】:

between 命令用于代替&gt;=&lt;= 例如

usMoviesInRange <- movies %>% filter(country == "USA") %>% filter(year>=1986 &<=2016)

可以改写为

usMoviesInRange <- movies %>% filter(country == "USA") %>% filter(between(year, 1986, 2016))

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 1970-01-01
    • 2019-02-17
    • 2020-09-29
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多