【问题标题】:using tapply() with strptime() formatted date使用带有 strptime() 格式化日期的 tapply()
【发布时间】:2014-06-23 13:53:00
【问题描述】:

我只想从一天中定期获取的一组值中计算出每日平均值,但是对于数据集中的不同天数。当我的日期是一个因素时,tapply() 很棒

    > Data$Data <- as.factor(Data$Date)
    > str(Data$Date)
    Factor w/ 55 levels "01/05/2014","02/05/2014",..: 3 3 3 3 3 3 3 3 3 3 ...
    > tapply(Data$Humidity,Data$Date, FUN = mean)
    01/05/2014 02/05/2014 03/04/2014 03/05/2014 04/04/2014 04/05/2014 05/04/2014 05/05/2014 06/04/2014 
    99.96875   100.00000  96.65833   99.80625   84.14375   89.56042   93.75833   39.58750   87.55000 

这正是我想要的,但这些日期不再按时间顺序排列,因为我将其作为一个因素。

相反,我尝试使用 strptime() 作为 R 识别的日期格式。从头开始......

    > Data$Date<-strptime(Data$Date, format="%d/%m/%Y")
    > str(Data$Date)
    POSIXlt[1:2586], format: "2014-04-03" "2014-04-03" "2014-04-03" "2014-04-03" "2014-04-03" "2014-04-03" ...
    > tapply(Data$Humidity,Data$Date, FUN = mean)
    Error in INDEX[[i]] : subscript out of bounds

但我只是收到以下错误消息?有谁知道为什么这不起作用?

【问题讨论】:

    标签: r strptime tapply


    【解决方案1】:

    您可能希望查看像 dplyr 这样不需要像 tapply 函数这样的因素的包。 => http://cran.r-project.org/web/packages/dplyr/dplyr.pdf

    语法是这样的,

    DF <- your data frame
    gb <- group_by(DF, Date)
    DF <- mutate(gb, Mean_Humidity = mean(Humidity)
    DF <- arrange(DF, date)
    

    【讨论】:

      【解决方案2】:

      您可以在执行tapply 时将您的日期转换为一个因子

      tapply(Data$Humidity,factor(Data$Date), FUN = mean)
      

      tapply 函数需要一个因子。

      【讨论】:

        【解决方案3】:

        我还发现我可以在之后通过 dataframe() 简单地将 tapply() 输出更改为 strptime(),而不是在之前尝试这样做,然后按日期 order()

            Data$Date <- as.factor(Data$Date)
            DAVEH <- tapply(Data$Humidity,Data$Date, FUN = mean)
        
            site.daily<-data.frame(c(names(DAVEH)),c(DAVEH))
            rownames(site.daily)<-seq_len(nrow(site.daily))
            colnames(site.daily)<-c("Date","DAVEH")
        
            site.daily$Date<-strptime(site.daily$Date, format="%d/%m/%Y")
        
            site.daily<-site.daily[order(site.daily$Date),]
            rownames(site.daily)<-seq_len(nrow(site.daily)) # again as they have been re-ordered
        
          > site.daily
             Date     DAVEH
         1  2014-04-03  96.65833
         2  2014-04-04  84.14375
         3  2014-04-05  93.75833
         4  2014-04-06  87.55000
         5  2014-04-07  58.87708
         6  2014-04-08  99.83542
         7  2014-04-09  87.68125.....
        

        等等。

        【讨论】:

          猜你喜欢
          • 2016-10-20
          • 2016-03-11
          • 2012-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-15
          相关资源
          最近更新 更多