使用 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