Я фильтрую данные своего эксперимента, я хочу получить все строки, где время составляет от 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 строки. Можете ли вы определить проблему?
похоже, вы фильтруете строки по числовому значению. попробуй mutate(Duration..in.seconds. = as.numeric(Duration..in.seconds.))
перед фильтром
Я предполагаю, что ваши данные находятся в 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
Что делает операция %in%
?
@EyalKatz Используется для фильтрации всех тех элементов, которые присутствуют в c (180:1800).
Каков результат
class(dat$Duration..in.seconds.)
? Он должен быть числовым, но в примере подразумевается символ, который нельзя отфильтровать с помощью числового условия.