【问题标题】:R function that can sum of every x values, overlapping the data for each calculation? [duplicate]R函数可以对每个x值求和,每次计算重叠数据? [复制]
【发布时间】:2020-10-16 15:30:55
【问题描述】:

我是 R 新手,以前从未在此网站上发过帖子,所以如果我没有提供足够的信息或措辞不当,我提前道歉。

我有一个数据框,每 5 分钟代表一次能源数据。为了找到一整天的基础率,我想每 5 个值求和(30 分钟的时间段),然后每 5 分钟找到最低值

因此,如果我有 (a, b, c, d, e, f, g, h, i) 并且每个字母代表一个数据点,我希望它找到以下各项的总和:

  1. (a, b, c, d, e, f)
  2. (b, c, d, e, f, g)
  3. (c, d, e, f, g, h)
  4. (d, e, f, g, h, i)

如果函数可以选择这 4 个中的哪一个是最低的,那将是完美的,但如果它可以在新列中为我提供总和,我可以使用另一个函数对其进行排序。

我的数据看起来像这样(但要长很多,不确定我是否应该发布整个内容):

Time Value
1:00 5.5
1:05 5.3
1:10 5.4
1:15 6.3
1:20 4.6
1:25 6.4

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用zoo 中的rollsum 函数来计算滚动和。根据您要放置答案的位置,您可以align 相应地输出。

    例如,右对齐 - 当您想要将位置 1、2、3、4 和 5 相加时,应将其放在位置 5。

    library(dplyr)
    library(zoo)
    
    df %>% mutate(roll_sum = rollsumr(Value, 5, fill = NA))
    
    #  Time Value roll_sum
    #1 1:00   5.5       NA
    #2 1:05   5.3       NA
    #3 1:10   5.4       NA
    #4 1:15   6.3       NA
    #5 1:20   4.6     27.1
    #6 1:25   6.4     28.0
    

    左对齐 - 当您想将位置 1 到 5 的总和放在位置 1 时。

    df %>% mutate(roll_sum = rollsum(Value, 5, fill = NA, align = 'left'))
    
    #  Time Value roll_sum
    #1 1:00   5.5     27.1
    #2 1:05   5.3     28.0
    #3 1:10   5.4       NA
    #4 1:15   6.3       NA
    #5 1:20   4.6       NA
    #6 1:25   6.4       NA
    

    居中对齐 - 当您想要将位置 1 到 5 的总和包含在位置 3 时。

    df %>% mutate(roll_sum = rollsum(Value, 5, fill = NA))
    
    #  Time Value roll_sum
    #1 1:00   5.5       NA
    #2 1:05   5.3       NA
    #3 1:10   5.4     27.1
    #4 1:15   6.3     28.0
    #5 1:20   4.6       NA
    #6 1:25   6.4       NA
    

    请注意,在所有情况下,数字都相同,但答案的位置不同。如果将上述操作的输出存储在result中,则可以通过min(result$roll_sum, na.rm = TRUE)得到最小值。

    【讨论】:

      【解决方案2】:

      看一下zoo库中的rollmean函数,例如:

      data <- data %>%
        mutate(Avg_5period=zoo::rollmean(Value,k=5,fill=NA))
      

      【讨论】:

        猜你喜欢
        • 2021-08-12
        • 1970-01-01
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-25
        相关资源
        最近更新 更多