每个ID超过阈值的连续观测的最大连续值

时间:2019-08-27 11:13:05

标签: r

我看了一些类似主题的答案,但不幸的是没有一个奏效。 我有一个时间序列.df,我想将每个ID的连续观测值的最大值仅计算并保留为单独的列。

enter image description here

...在将新列更改为现有.df之后,将使用c(max)来概括新列,但是暂时而言,无论如何,它都应保留在现有.df中看起来如何。

rle()是这里的解决方案,还是我需要创建要与rollsum()/rollmax()一起使用的函数(x)?

谢谢。

先生。 K

dput(df)
structure(list(ID = c("a", "a", "a", "a", "a", "b", "b", "b", 
"b", "b", "b"), year = c(2012, 2013, 2014, 2015, 2016, 2010, 
2011, 2012, 2013, 2014, 2015), obs = c(1, 1, 0, 1, 0, 1, 0, 1, 
1, 1, 1)), class = "data.frame", row.names = c(NA, -11L))

2 个答案:

答案 0 :(得分:1)

您可以使用window.onblur = function () { window.close(); }; 进行操作。以R为基数的一种方式是

rle

答案 1 :(得分:0)

data.table中,我们可以使用rleid获取连续出现的ID,使用table获取计数并从每个组中选择max

library(data.table)
setDT(df)[, max_conc := max(table(rleid(obs))), by = ID]

df
#    ID year obs max_conc
# 1:  a 2012   1        2
# 2:  a 2013   1        2
# 3:  a 2014   0        2
# 4:  a 2015   1        2
# 5:  a 2016   0        2
# 6:  b 2010   1        4
# 7:  b 2011   0        4
# 8:  b 2012   1        4
# 9:  b 2013   1        4
#10:  b 2014   1        4
#11:  b 2015   1        4