这是我正在处理的一个模拟数据框架:

df_in <- data.frame(
  time = c(1,2,3,4,5,6,7,8,9,10),
  state = c(1,1,1,2,2,3,1,1,1,2),
  returns = c(0.5,0.2,0.3,0.4,0.1,0.2,1.1,0.8,0.5,0.2)
)
   time state returns
1     1     1     0.5
2     2     1     0.2
3     3     1     0.3
4     4     2     0.4
5     5     2     0.1
6     6     3     0.2
7     7     1     1.1
8     8     1     0.8
9     9     1     0.5
10   10     2     0.2

我希望聚合数据,以便在连续行中具有相同"状态"的返回将被计算在一起,最好是组合在一起,但对于此应用程序,简单的求和也很好.

我希望输出如下所示:

df_out <- data.frame(
  time_start = c(1,4,6,7,10),
  time_end = c(3,5,6,9,10),
  state = c(1,2,3,1,2),
  returns = c(1.0,0.5,0.2,2.4,0.2)
)

  time_start time_end state returns
1          1        3     1     1.0
2          4        5     2     0.5
3          6        6     3     0.2
4          7        9     1     2.4
5         10       10     2     0.2

在这个例子中,我将yield 简单地加在一起,但正如前面所说的,如果可能的话,复合yield 将是最优的.

另有thread个与我试图实现的目标相当接近,但它使用了一个可识别的‘ID’,而这里的州没有.

我并没有try 太多,但正在考虑使用dplyr包中的方法,因为对于这样的事情,它们似乎相当有效.不过,我对这个套餐完全陌生.

推荐答案

您可以使用consecutive_id函数来创建这个新组,对于同时出现的行,它将具有唯一的id.然后,您可以计算此组中每个组的首选汇总统计信息.

library(dplyr)

df_in %>%
  mutate(consecutive_group = consecutive_id(state)) %>%
  summarise(time_start = min(time, na.rm = TRUE), 
            time_end = max(time, na.rm = TRUE), 
            state = first(state), 
            returns = sum(returns, na.rm = TRUE), .by = consecutive_group) %>%
  select(-consecutive_group)

#  time_start time_end state returns
#1          1        3     1     1.0
#2          4        5     2     0.5
#3          6        6     3     0.2
#4          7        9     1     2.4
#5         10       10     2     0.2

R相关问答推荐

在R中,如何创建时间间隔的图表?

将一个载体的值相加,直到达到另一个载体的值

如何使用stat_extract_all正确提取我的目标值?

根据多个条件增加y轴高度以适应geom_text标签

使用sf或terra的LINESTRAING的累积长度

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

如何在一次运行中使用count进行多列计数

如何编辑gMarginal背景以匹配绘图背景?

如何计算多个日期是否在一个日期范围内

如何使用tryCatch执行语句并忽略警告?

观察器中的inaliateLater的位置

远离理论值的伽马密度曲线下面积的近似

如何在PrePlot()中将多个元素设置为斜体

计算使一组输入值最小化的a、b和c的值

带RStatix的Wilcoxon环内检验

删除在R中的write.table()函数期间创建的附加行

当由base::限定时,`[.factor`引发NextMethod错误

整理ggmosaic图的标签

抽样变换-REXP与RWEIBUR

如何创建直方图与对齐的每月箱?