【问题标题】:Filter by multiple conditions按多个条件过滤
【发布时间】:2018-12-05 02:52:12
【问题描述】:

我有如下 data.frame

ID  country age
1   X   83
2   X   15
3   Y   2
4   Y   12
5   X   2
6   Y   2
7   Y   18
8   X   85

我需要过滤年龄低于 10 岁且同时高于 80 岁的行。 我怎样才能以最简单的方式做到这一点?对于一种情况,我可以使用filter(data.frame, age > 80),但我不知道如何同时处理两种情况?

【问题讨论】:

  • | 用于或。喜欢df1 %>% filter(age < 10 | age > 80)
  • 另一个选项是filter(dat, !between(age, 10, 80))

标签: r dplyr


【解决方案1】:

我不确定您是否想要介于 10 和 80 之间的值或低于 10 和高于 80 的值。如果您想要介于两者之间的值,您可以在 filter 中输入多个参数。如果你想要那些低于 10 和高于 80 的你可以使用| 作为“或”运算符:

library(tidyverse)

data %>%
  filter(age > 10,
         age < 80)

data %>%
  filter(age < 10 | age > 80)

【讨论】:

  • 您的使用不符合 OP 的需要。逗号充当 AND 而不是 OR。它需要 80
  • @anba 也许我不明白这个问题。目标是拥有一个 1080 的数据集?我将编辑两者的答案。
  • @Ben G 我想过滤掉年龄 80 的数据。换句话说,我只需要从我的示例 data.frame 中获取第 1、3、5、5、8 行的数据。
【解决方案2】:

使用dplyr,以下内容也可能对您有所帮助

library(dplyr)
##Creating variable dat here which has values in it.
dat <- read.table(text = "ID country age
1   X   83
2   X   15
3   Y   2
4   Y   12
5   X   2
6   Y   2
7   Y   18
8   X   85",
                  header = TRUE)

dat %>%
  filter(age<10 | age>80)

【讨论】:

    【解决方案3】:
            dat <- read.table(text = "ID country age
                             1   X   83
                             2   X   15
                              3   Y   2
                              4   Y   12
                               5   X   2
                               6   Y   2
                               7   Y   18
                               8   X   85",
                               header = TRUE)
    
     x<-filter(dat, dat$age>80&dat$age<10) 
     x
    

    现在,您可以使用 OR (|) 条件,也可以根据您实际尝试执行的操作使用 AND (&) 条件。

    【讨论】:

    • 正如所写,这个答案不可能奏效。年龄不能同时大于 80 岁和小于 10 岁(我相信您的意思是使用 |,而不是 &amp;)。此外,应避免在filter 内部使用$。可以直接引用数据框的列名,无需使用$
    【解决方案4】:

    您可以使用来自 dplyr 的filter()

    x<-filter(dat, dat$age>80|dat$age<10) 
    

    【讨论】:

    • 请完善你的答案,为大家做一些解释。
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2018-03-25
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多