对 R 中由相同标志标识的时间序列值组进行单独操作
Separate operations on groups of time series values identified by same flag in R
有没有人有解决方案可以执行
上的单独操作
- 组连续值是
- 时间序列的子集并且是
- 由重复出现的相同标志识别
- 与 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)
)
data.table
函数 rleid
非常适合为连续值的运行提供组 ID。我继续使用 data.table
,但除了 rleid
部分,你可以在 dplyr
或 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
有没有人有解决方案可以执行
-
上的单独操作
- 组连续值是
- 时间序列的子集并且是
- 由重复出现的相同标志识别
- 与 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)
)
data.table
函数 rleid
非常适合为连续值的运行提供组 ID。我继续使用 data.table
,但除了 rleid
部分,你可以在 dplyr
或 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