在R

时间:2018-11-07 18:04:19

标签: r group-by time-series flags

有人有解决方案吗

  • 进行单独操作
  • 一组连续值是
  • 时间序列的子集,并且是
  • 由重复出现的相同标志标识
  • 带有R吗?

在下面的代码创建的示例数据集中,例如,这是指分别计算连续几天“ flag” == 1的每个组的“ value”平均值。

科学中的典型情况是由仪器记录的数据集,该仪器重复执行校准程序并用相同的标记标记相应的数据,但是用户需要使用相同的程序分别评估每个校准。

感谢您的建议。詹斯

library(lubridate)

df <- data.frame(
    date = seq(ymd("2018-01-01"), ymd("2018-06-29"), by = "days"),
    flag = rep( c(rep(1,10), rep(0, 20)), 6),
    value = seq(1,180,1)
  )

1 个答案:

答案 0 :(得分:1)

data.table函数rleid非常适合为连续值的运行赋予组ID。我继续使用data.table,但是在rleiddplyr中,除了base部分以外,您都可以使用。

我的答案归结为使用data.table::rleid,然后选择自己喜欢的方式take the mean by group (R-FAQ link)

library(data.table)
setDT(df)
df[, r_id := rleid(flag)]
df[flag == 1, list(
    min_date = min(date),
    max_date = max(date),
    mean_value = mean(value)
  ), by = r_id]

#    r_id   min_date   max_date mean_value
# 1:    1 2018-01-01 2018-01-10        5.5
# 2:    3 2018-01-31 2018-02-09       35.5
# 3:    5 2018-03-02 2018-03-11       65.5
# 4:    7 2018-04-01 2018-04-10       95.5
# 5:    9 2018-05-01 2018-05-10      125.5
# 6:   11 2018-05-31 2018-06-09      155.5