R语言 按多个条件筛选

hgqdbh6s  于 2022-12-15  发布在  其他
关注(0)|答案(5)|浏览(745)

我有数据了,框架如下

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),但我不知道如何同时对两个条件进行过滤。

sqserrrh

sqserrrh1#

从问题中我不确定你想要的值是在10和80之间,还是在10以下和80以上。如果你想要这些值,你可以在filter中放入多个参数。如果你想要10以下和80以上的值,你可以使用|作为“or”运算符:

library(tidyverse)

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

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

fnvucqvd2#

以下内容也可以帮助您使用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)
8ftvxx2r

8ftvxx2r3#

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(&)条件。

nbysray5

nbysray54#

您可以使用dplyr的filter()

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

cidc1ykv5#

对于那些坚持使用R基数的人来说,这里有另一个解决方案:

# Read in the data
data <- 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
)

# Filter according to conditions
data[data$age < 10 | data$age > 80,]

输出:

ID country age
1  1       X  83
3  3       Y   2
5  5       X   2
6  6       Y   2
8  8       X  85

您可以根据需要添加任意多个条件,并使用括号来阐明运算顺序。例如,如果我们希望添加另一个条件以确保国家/地区必须是X(除了OP问题中提出的条件之外):

data[(data$age < 10 | data$age > 80) & data$country == "X",]

输出:

ID country age
1  1       X  83
5  5       X   2
8  8       X  85

条件末尾的逗号用于指示我们正在将条件应用于数据框的行。要在筛选行的同时筛选列,请澄清逗号后面的列:

data[data$age < 10 | data$age > 80, c("ID", "country")]

输出:

ID country
1  1       X
3  3       Y
5  5       X
6  6       Y
8  8       X

相关问题