首页 文章

R - 按小时聚合,最大值为秒

提问于
浏览
1

我有数据,我想在时间步骤上聚合,另外想要计算该组中另一个值的最大值 .

为了聚合,我运行以下代码:

s_stats <- lapply(s_df_array, function(x) {
aggregate(x, by=list(unique.values=x$start), length)
})

s_df_array是一个数据帧表,代码可以很好地计算x $ start中每个值的条目出现次数 . 在这里你可以看到一些数据:列表中的第一个data.frame:

alb.station alb.start alb.km
alb         2         10
alb         2         67
alb         3         23
alb         3         74
alb         3         3
alb         3         15
alb         4         23
alb         4         52

列表中的第二个data.frame:

alt.station alt.start alt.km
alt         3         25
alt         3         45
alt         4         15
alt         4         10

列表中的第三个data.frame:与第一个和第二个相同的结构,但列名以“ber”开头 . 这将继续列表中的44个data.frames

对于新列表中的每个data.frame,结果都应该是这样的:

alb.unique.values alb.station alb.max_km
2                 2           67
3                 4           74
4                 2           52

alt.unique.values alt.station alt.max_km
3                 2           45
4                 2           15

等等所有44个data.frames

编辑:为列表添加了更多示例

1 回答

  • 0

    我们可以做的

    library(dplyr)
    df1 %>% 
       group_by(alb.station, alb.start) %>% 
       summarise(station = n(), max.km = max(alb.km))
    # A tibble: 3 x 4
    # Groups: alb.station [?]
    #    alb.station alb.start station max.km
    #   <chr>           <int>   <int>  <dbl>
    #1 alb                 2       2   67.0
    #2 alb                 3       4   74.0
    #3 alb                 4       2   52.0
    

    有关data.frames的列表

    map(lst, ~ .x %>%
                group_by(alb.station, alb.start) %>%
                summarise(station = n(), max.km = max(alb.km)))
    

    更新

    如果我们有一个嵌套的 list 元素,要么创建一个递归函数,要么使用 if/else

    map(lst, ~ if(is.data.frame(.x)) .x %>%
            rename_all(funs(sub("^[^.]*\\.", "", .))) %>% 
            group_by(station, start) %>% 
            summarise(n = n(), max.km = max(km)) else map_df(.x, ~ .x %>%
            rename_all(funs(sub("^[^.]*\\.", "", .))) %>%
            group_by(station, start) %>%
            summarise(n = n(), max.km = max(km))))
    

    数据

    lst <- list(df1, df2, list(df1, df2))
    

相关问题