Вы просто не передали кадр данных для фильтрации, вы передали вектор. Обратите внимание на разницу
# failes
iislog1 <- filter(iislog1$iistime > '04:40:59' & iislog1$iistime < '21:38:37')
# works |--missing--|
iislog1 <- iislog1 %>% filter(iislog1$iistime > '04:40:59' & iislog1$iistime < '21:38:37')
tidyverse
сияет за то, что он менее многословен, чем базовая R. Большая экономия заключается в том, что в трубопроводе нет необходимости каждый раз называть фрейм данных (т. Е. df$col
). Вы можете , но сначала вам нужно что-то передать, например, вы не можете
df %>% filter(df$col < 2)
но это само по себе
filter(df$col < 2)
Это потому, что все глаголы dplyr
ожидают, что первым аргументом будет объект, который нужно передать, а затем вернут фрейм данных. Эти три вещи одинаковы
filter(df, col < 2)
df %>% filter(., col < 2)
df %>% filter(col < 2)
Итак, filter()
ожидал кадр данных, и вы передали ему вектор df$col
, и он не знал, что делать. Я надеюсь, что это объяснение имеет смысл. Книга R for Data Science - отличный ресурс для этого и бесплатный онлайн.
В общем, лучший способ выполнить все ваши шаги - что-то вроде этого
library(tidyverse)
library(lubridate)
raw_data <-
tibble(
iisdate = "2019-05-10",
iistime = paste0(1:23, "H 35M 11S"),
csUriStem = "/ClaraPortal",
timeTaken = 7375,
a_column_you_dont_need = "a",
another_one = "b"
)
iislog <-
raw_data %>%
mutate(
iisdate = ymd(iisdate),
iistime = hms(iistime),
csUriStem = tolower(csUriStem)
) %>%
select(iisdate:timeTaken) %>%
filter(iistime > hms("04:40:59"), iistime < hms("21:38:37"))