#r #filter
Вопрос:
Я изучаю R и занимаюсь каким-то проектом. Мне нужна фильтрация по многим значениям со временем, поэтому я написал ниже. Но произошла какая-то ошибка, и я не нашел решения. Мне нужна помощь.
Это список значений.
divvy_trips <- c("divvy_trips_2013","divvy_trips_2014_Q1Q2","divvy_trips_2014_Q3_07","divvy_trips_2014_Q3_0809","divvy_trips_2014_Q4","divvy_trips_2015_Q1","divvy_trips_2015_Q2","divvy_trips_2015_07","divvy_trips_2015_08","divvy_trips_2015_09","divvy_trips_2015_Q4","divvy_trips_2016_Q1","divvy_trips_2016_04","divvy_trips_2016_05","divvy_trips_2016_06","divvy_trips_2016_Q3","divvy_trips_2016_Q4","divvy_trips_2017_Q1","divvy_trips_2017_Q2","divvy_trips_2017_Q3","divvy_trips_2017_Q4","divvy_trips_2018_Q1","divvy_trips_2018_Q2","divvy_trips_2018_Q3","divvy_trips_2018_Q4","divvy_trips_2019_Q1","divvy_trips_2019_Q2","divvy_trips_2019_Q3","divvy_trips_2019_Q4")
divvy_trip_days=NULL
for(i in divvy_trips){
trip<-eval(parse(text=i))
if ("starttime" %in% names(trip)){
trip<-select(trip,usertype) %>%
filter(((hour(starttime) >=6 amp; hour(stoptime) >=6) amp; (hour(starttime)<=10 amp;
hour(stoptime) <=10)) |((hour(starttime) >=16amp; hour(stoptime) >=16)amp; (hour(starttime)<=20 amp; hour(stoptime) <=20)))%>%
group_by(usertype,what_day = wday(starttime))%>%
summarise(count=n())
}
divvy_trip_days <- rbind(divvy_trip_days,trip)
print(str(i))
}
Ошибка: Проблема с filter()
вводом ..1
.
я ввожу ..1
это |...
.
x объект «время начала» не найден
Комментарии:
1.
select(trip,usertype)
выбирает только столбецusertype
изtrip
. Других столбцов не будет (так что также не будет столбца с именем starttime). Кроме того, я бы посоветовал разобратьсяget
.2. благодарить. вы думаете, что используете select() с такими столбцами,как starttime, stoptime и так далее?
3. Не уверен, зачем вам вообще здесь нужен выбор, но да, если вы решите использовать выбор, вам нужно выбрать все столбцы, которые вы хотите использовать
4. Я думаю, что выбор какого — то столбца позволит сократить время вычислений. но вы знаете, что в этом нет необходимости?
Ответ №1:
Трудно ответить без образца или подробной информации о ваших данных, но вы можете попробовать —
library(dplyr)
library(purrr)
library(lubridate)
mget(divvy_trips) %>%
map_df(~{
if ("starttime" %in% names(.x)){
.x <- .x %>%
filter(((hour(starttime) >=6 amp; hour(stoptime) >=6) amp;
(hour(starttime)<=10 amp; hour(stoptime) <=10)) |
((hour(starttime) >=16 amp; hour(stoptime) >=16) amp;
(hour(starttime)<=20 amp; hour(stoptime) <=20))) %>%
count(usertype,what_day = wday(starttime), name = 'count')
}
.x
}) -> divvy_trip_days
divvy_trip_days
Если все divvy_trips
фреймы данных содержат столбец starttime
, вы можете пропустить этот if
шаг.