首页 > 解决方案 > R和过滤器,rbind

问题描述

我学习 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 & hour(stoptime) >=6) & (hour(starttime)<=10 & 
               hour(stoptime) <=10)) |((hour(starttime) >=16& hour(stoptime) >=16)& (hour(starttime)<=20 & 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。i 输入..1|...。未找到 x 对象“开始时间”

标签: rfilter

解决方案


如果没有样本或有关您的数据的详细信息,很难回答,但您可以尝试 -

library(dplyr)
library(purrr)
library(lubridate)

mget(divvy_trips) %>%
  map_df(~{
    if ("starttime" %in% names(.x)){
    .x <- .x %>%
      filter(((hour(starttime) >=6 & hour(stoptime) >=6) & 
                (hour(starttime)<=10 & hour(stoptime) <=10)) |
               ((hour(starttime) >=16 & hour(stoptime) >=16) & 
                (hour(starttime)<=20 & hour(stoptime) <=20))) %>% 
      count(usertype,what_day = wday(starttime), name = 'count')
    }
    .x
  }) -> divvy_trip_days

divvy_trip_days

如果其中的所有数据框都divvy_trips包含该列starttime,那么您可以跳过该if步骤。


推荐阅读