使用 filter() 按值过滤向量
Filtering vector by values with filter()
我正在过滤我的实验数据,我想获取时间在 180 到 1800 秒之间的所有行。
我这样使用filter()
:
dat = dat %>%
filter(Duration..in.seconds. > 180) %>%
filter(Duration..in.seconds. < 1800)
第一个过滤器效果很好,但第二个过滤器过滤了所有数据,这是错误的,这里是向量:
dat$Duration..in.seconds.
[1] "114" "188" "453" "114" "188" "453" "114" "188" "453" "188" "453" "2000"
[13] "2000" "1900"
如您所见,第二个过滤器假设只过滤 2 行。
你能发现问题吗?
我假设您的数据在 characters
中,因此要过滤您首先必须将其转换为 numeric
。之后,您可以使用一个 filter
函数和 &
操作来过滤条件。您可以使用以下代码:
dat <- data.frame(Duration..in.seconds. = c("114", "188", "453", "114" , "188" , "453" , "114" , "188" , "453" , "188" , "453", "2000" ,"2000" ,"1900" ))
library(dplyr)
dat = dat %>%
mutate(Duration..in.seconds. = as.numeric(Duration..in.seconds.)) %>%
filter(Duration..in.seconds. > 180 & Duration..in.seconds. < 1800)
输出:
Duration..in.seconds.
1 188
2 453
3 188
4 453
5 188
6 453
7 188
8 453
试试这个:
## Loading the library
library(dplyr)
## Loading the data
dat = data.frame(Duration..in.seconds. = c("114", "188", "453", "114" , "188" , "453" , "114" , "188" , "453" , "188" , "453", "2000" ,"2000" ,"1900" ))
## Filtering
dat %>%
filter(Duration..in.seconds. %in% c(180:1800))
Duration..in.seconds.
1 188
2 453
3 188
4 453
5 188
6 453
7 188
8 453
我正在过滤我的实验数据,我想获取时间在 180 到 1800 秒之间的所有行。
我这样使用filter()
:
dat = dat %>%
filter(Duration..in.seconds. > 180) %>%
filter(Duration..in.seconds. < 1800)
第一个过滤器效果很好,但第二个过滤器过滤了所有数据,这是错误的,这里是向量:
dat$Duration..in.seconds.
[1] "114" "188" "453" "114" "188" "453" "114" "188" "453" "188" "453" "2000"
[13] "2000" "1900"
如您所见,第二个过滤器假设只过滤 2 行。 你能发现问题吗?
我假设您的数据在 characters
中,因此要过滤您首先必须将其转换为 numeric
。之后,您可以使用一个 filter
函数和 &
操作来过滤条件。您可以使用以下代码:
dat <- data.frame(Duration..in.seconds. = c("114", "188", "453", "114" , "188" , "453" , "114" , "188" , "453" , "188" , "453", "2000" ,"2000" ,"1900" ))
library(dplyr)
dat = dat %>%
mutate(Duration..in.seconds. = as.numeric(Duration..in.seconds.)) %>%
filter(Duration..in.seconds. > 180 & Duration..in.seconds. < 1800)
输出:
Duration..in.seconds.
1 188
2 453
3 188
4 453
5 188
6 453
7 188
8 453
试试这个:
## Loading the library
library(dplyr)
## Loading the data
dat = data.frame(Duration..in.seconds. = c("114", "188", "453", "114" , "188" , "453" , "114" , "188" , "453" , "188" , "453", "2000" ,"2000" ,"1900" ))
## Filtering
dat %>%
filter(Duration..in.seconds. %in% c(180:1800))
Duration..in.seconds.
1 188
2 453
3 188
4 453
5 188
6 453
7 188
8 453