Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 寻找最大和区间_R_Loops_Dplyr - Fatal编程技术网

R 寻找最大和区间

R 寻找最大和区间,r,loops,dplyr,R,Loops,Dplyr,我有每小时一次的消费数据 Date Hour Flow 2017-06-01 7 15.25 2017-06-01 8 5.25 2017-06-01 9 16.45 2017-06-01 10 31.25 2017-06-01 11 11.25 2017-06-01 12 25.33 2017-06-01 13 27.28 2017-06

我有每小时一次的消费数据

Date         Hour      Flow
2017-06-01   7         15.25
2017-06-01   8         5.25
2017-06-01   9         16.45
2017-06-01   10        31.25
2017-06-01   11        11.25
2017-06-01   12        25.33
2017-06-01   13        27.28
2017-06-01   14        17.43
2017-06-01   15        19.23
我想指出这两个小时是一天中金额最大的两个小时

Date         Hour      Flow     Mark
2017-06-01   7         15.25    0
2017-06-01   8         5.25     0
2017-06-01   9         16.45    0
2017-06-01   10        31.25    0
2017-06-01   11        11.25    0
2017-06-01   12        25.33    1
2017-06-01   13        27.28    1
2017-06-01   14        17.43    0
2017-06-01   15        19.23    0
实际数据超过1000天


谢谢

看起来您正在试图找到最大的连续总和

这里有一种破解方法——我相信还有更优雅的解决方案:

library(dplyr) 

df %>% 
  mutate(dummy_flow = lead(Flow),
         total = Flow + dummy_flow,
         Mark = ifelse(total == max(total, na.rm = TRUE), 1, 0),
         Mark = ifelse(lag(Mark) == 1 | Mark == 1, 1, 0)) %>% 
  replace(is.na(.), 0) %>% 
  select(-c(dummy_flow, total))

下面是一个使用
数据的选项。表

library(data.table)
DT[, Mark := {
    f <- Flow + shift(Flow, fill=0)
    i <- which.max(f)
    replace(integer(.N), c(i, i-1L), 1L)
  }, Date]

你好,格尔巴,欢迎来到SO。你能详细说明一下吗。你指的是多少钱?为什么在6月1日有两个标记值,而任务是标记最大的金额(除非出现平局,否则应该只存在一次)?最后,你能分享一下你迄今为止所做的尝试吗?这将有助于每个人了解你正在尝试做什么,并帮助我们了解你到底被困在哪里。你的方法到底在哪里失败?请帮助我们帮助你。我做了一个小的修正,我有我一直在寻找的解决方案。df%%>%mutate(dummy_flow=lead(flow),total=flow+dummy_flow,)%%>%group_by(Date)%%>%mutate(max_mark=as.integer(total==max(total))%%>%replace(is.na(“.”,0)%%>%select(-c(dummy_flow,total))感谢replace(is.na(.),0)-->as.Date.numeric(value)中的错误:“来源”必须是一个完美的解决方案。这就是我要找的。我想我必须切换到data.table
library(data.table)
DT <- fread("Date         Hour      Flow
2017-06-01   7         15.25
2017-06-01   8         5.25
2017-06-01   9         16.45
2017-06-01   10        31.25
2017-06-01   11        11.25
2017-06-01   12        25.33
2017-06-01   13        27.28
2017-06-01   14        17.43
2017-06-01   15        19.23")