R 查找自最小值以来的时间

R 查找自最小值以来的时间,r,dplyr,R,Dplyr,我有一个数据帧,其中包含一个变量、值(以NAs开头)以及该值有效的时间。对于每一行,我需要一个新的值来确定当前的cummin,以及从该最小值开始的时间 我有cummin部分,但请注意“多长”部分 例如,这里是我的数据帧 example <- data.frame(variable = c('a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'), time = c(Sys.t

我有一个数据帧,其中包含一个变量、值(以NAs开头)以及该值有效的时间。对于每一行,我需要一个新的值来确定当前的
cummin
,以及从该最小值开始的时间

我有
cummin
部分,但请注意“多长”部分

例如,这里是我的数据帧

example <- data.frame(variable = c('a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'),
                      time = c(Sys.time(), Sys.time() + 5, Sys.time() + 15, Sys.time() + 34, Sys.time() + 51, Sys.time(), Sys.time() + 10, Sys.time() + 39, Sys.time() + 63, Sys.time() + 79, Sys.time() + 102, Sys.time() + 110, Sys.time() + 115),
                      value = c(NA, 3, 6, 2, 8, NA, NA, 1, 4, 3, 2, 0, 3))
我想添加一些内容以获得自当前_min以来的时间,从而获得以下内容:

   variable                time value current_min time_since_min
 1        a 2017-10-02 17:13:59    NA          NA             NA
 2        a 2017-10-02 17:14:04     3           3         0 secs
 3        a 2017-10-02 17:14:14     6           3        10 secs
 4        a 2017-10-02 17:14:33     2           2         0 secs
 5        a 2017-10-02 17:14:50     8           2        17 secs 
 6        b 2017-10-02 17:13:59    NA          NA             NA
 7        b 2017-10-02 17:14:09    NA          NA             NA
 8        b 2017-10-02 17:14:38     1           1         0 secs
 9        b 2017-10-02 17:15:02     4           1        24 secs
10        b 2017-10-02 17:15:18     3           1        40 secs
11        b 2017-10-02 17:15:41     2           1        63 secs
12        b 2017-10-02 17:15:49     0           0         0 secs
13        b 2017-10-02 17:15:54     3           0         5 secs
实际的数据帧超过1000000行,包含大量变量,因此任何特别慢的数据帧都可能有问题


任何帮助都将不胜感激

您可以通过为当前分钟添加一个
组,然后添加
时间时间[1]

你会得到一些奇怪的NA结果,所以你可以在以后删除它们

example %>% 
  group_by(variable) %>% 
  mutate(current_min = cum_na.rm(value, cummin)) %>%
  group_by(current_min) %>%
  mutate(time_since_min = time - time[1])
example %>% 
  group_by(variable) %>% 
  mutate(current_min = cum_na.rm(value, cummin)) %>%
  group_by(current_min) %>%
  mutate(time_since_min = time - time[1])