代码之家  ›  专栏  ›  技术社区  ›  Jawairia

如何通过对时间值应用条件来计算R中数据帧的聚合统计信息?

  •  2
  • Jawairia  · 技术社区  · 8 年前

    我正在从事气候数据分析。在R中加载文件后,我的兴趣是根据一天中的小时数对数据进行子集。

    对于时间分析,如果我们的兴趣是处理小时数,我们可以使用$hour和存储时间向量的变量。

    我想将一天中每小时的数据子集为365天,然后在一年中的特定时间取平均值。假设我有兴趣在12:OO PM取一年的辐射/风速等值,然后取这些值的平均值,以获得所需的结果。

    我知道如何根据条件对数据帧进行子集。例如,如果我的数据在一个称为data的矩阵中,包含两行,比如时间和风速,我对辐照B不为零的数据子集感兴趣。我们可以使用以下代码来完成此操作

    my_data <- subset(data, data[,1]>0)
    

    但现在,为了处理存储在数据中的变量时间列中的小时值,如何对值进行子集?

    我的数据如下所示:

    enter image description here

    我希望我在这个问题上讲得有道理。

    提前感谢!

    1 回复  |  直到 8 年前
        1
  •  1
  •   Florian    8 年前

    这里有一个可能的解决方案。您可以使用创建每小时分组 format(df$time,'%H') ,因此我们只获得每个时段的小时数,然后我们可以简单地按此新列分组,并计算每组的平均值。

    df = data.frame(time=seq(Sys.time(),Sys.time()+2*60*60*24,by='hour'),val=sample(seq(5),49,replace=T))
    
    library(dplyr)
    
    df %>% mutate(hour=format(df$time,'%H')) %>%
      group_by(hour) %>%
      summarize(mean_val = mean(val))
    

    要首先对非零值进行子集划分,可以执行以下操作之一:

    df = subset(df,val!=0)
    

    或使用以下命令启动dplyr链:

    df %>% filter(df$val!=0)
    

    希望这有帮助!


    df 如下所示:

                      time val
    1  2018-01-31 12:43:33   4
    2  2018-01-31 13:43:33   2
    3  2018-01-31 14:43:33   2
    4  2018-01-31 15:43:33   3
    5  2018-01-31 16:43:33   3
    6  2018-01-31 17:43:33   1
    7  2018-01-31 18:43:33   2
    8  2018-01-31 19:43:33   4
    ...    ...       ...     ...
    

    和输出:

    # A tibble: 24 x 2
       hour  mean_val
       <chr>    <dbl>
     1 00        3.50
     2 01        3.50
     3 02        4.00
     4 03        2.50
     5 04        3.00
     6 05        2.00
     ....        ....
    

    这假设您的 time 列已属于类 POSIXct ,否则首先必须使用 as.POSIXct(x,format='%Y-%m-%d %H:%M:%S')