【问题标题】:Calculate average of a time period (from another dataset) per location in r计算 r 中每个位置的时间段平均值(来自另一个数据集)
【发布时间】:2016-09-13 05:11:54
【问题描述】:

我想计算 ds$date_fixed 和 ds$date_broken 之间时间段的平均燃烧时间 (burningshours$hours_burned)。我知道我可以使用下面的代码来计算:

ds$average_burninghours <- sapply (interval(ds$date_fixed, ds$date_broken), function(i)                                
                            mean (burning_hours$hours_burned[burning_hours$date%within%i]))

但我想根据位置和位置计算燃烧小时数。 所以,我想添加一些看起来像 lke: 'group_by = c(location, position)' 的代码,但我无法做到这一点。有人对此有想法吗?

示例代码:

ds <- data.frame( date_fixed= c("16-3-2015", "19-3-2015", "21-3-2015"), 
                     date_broken = c("18-3-2015", "22-3-2015", "24-3-2015"), 
                     location = c("A", "B", "B"), position = c("1", "2", "2"))

burning_hours <- data.frame(date = c("16-3-2015", "16-3-2015", "17-3-2015", "17-3-2015", 
                          "18-3-2015", "18-3-2015", "19-3-2015", "19-3-2015", "20-3-2015",
                          "20-3-2015", "21-3-2015", "21-3-2015", "22-3-2015", "22-3-2015",
                          "23-3-2015", "23-3-2015", "24-3-2015", "24-3-2015"), 
                           hours_burned= c("10", "11"), location = c("A", "B"), 
                           position = c("1", "2"))

期望的结果:

     date_fixed date_broken location position avg_burninghours
     16-3-2015  18-3-2015    A         1         10
     19-3-2015  22-3-2015    B         2         11
     21-3-2015  24-3-2015    B         2         11

【问题讨论】:

    标签: r grouping mean


    【解决方案1】:

    合并两个数据帧,然后合并。

    library(dplyr)
    library(lubridate)
    
    #Cleaning
    ds$date_fixed <- dmy(ds$date_fixed)
    ds$date_broken <- dmy(ds$date_broken)
    burning_hours$date <- dmy(burning_hours$date)
    burning_hours$hours_burned <- as.numeric(as.character(burning_hours$hours_burned))
    
    df <- merge(burning_hours,ds,by = c('location','position'))
    
    df %>%
        group_by(date_fixed,date_broken,location,position) %>%
        filter(date >= date_fixed,date <= date_broken) %>%
        summarise(avg_burninghours = mean(hours_burned))
    

    这给出了:

      date_fixed date_broken location position avg_burninghours
          (date)      (date)   (fctr)   (fctr)            (dbl)
    1 2015-03-16  2015-03-18        A        1               10
    2 2015-03-19  2015-03-22        B        2               11
    3 2015-03-21  2015-03-24        B        2               11
    

    【讨论】:

    • 当我在我拥有的整个数据集上运行此代码时,我只得到一个“avg_burninghours”的结果。它不会在 df 中创建新列。你知道这是从哪里来的吗?
    • 你在合并和子集之前运行了清理代码吗?您可以在运行合并和子集操作之前共享数据集的str 吗?数据中不正确的数据类型可能会阻止您对其进行操作。
    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2020-04-10
    • 2022-01-11
    • 2013-11-09
    • 1970-01-01
    相关资源
    最近更新 更多