R中行的交错添加

问题描述

我有一个包含10,000个条目的数据库,我需要更正日期。每行都按ID和Year进行索引。事件之间的时间和开始日期是正确的,但日期是错误的。我的数据集的示例如下:

    ID     Date       Time First_Date Year
1 ooo-207 1982-05-09     0 1982-05-09 1982
2 ooo-207 1982-05-09    12 1982-05-09 1982
3 ooo-207 1982-06-02    12 1982-05-09 1982
4 ooo-207 1982-06-02    10 1982-05-09 1982
5 ooo-207 1982-06-02    12 1982-05-09 1982
6 ooo-208 1982-07-06     0 1982-07-06 1982
7 ooo-208 1982-07-07    10 1982-06-12 1982
8 ooo-208 1982-07-08    11 1982-06-12 1982
9 ooo-208 1982-08-09    11 1982-06-12 1982

我需要以交错的方式按“第一时间”校正日期。计算每个新日期后,该新日期将成为添加下一个等待时间的起点。我需要每年从每只动物身上进行此操作。新的数据集如下所示:

    ID     Date       Time First_Date Year
1 ooo-207 1982-05-09     0 1982-05-09 1982
2 ooo-207 1982-05-21    12 1982-05-09 1982
3 ooo-207 1982-06-02    12 1982-05-09 1982
4 ooo-207 1982-06-12    10 1982-05-09 1982
5 ooo-207 1982-06-24    12 1982-05-09 1982
6 ooo-208 1982-07-06     0 1982-07-06 1982
7 ooo-208 1982-07-16    10 1982-07-06 1982
8 ooo-208 1982-07-27    11 1982-07-06 1982
9 ooo-208 1982-08-07    11 1982-07-06 1982

解决方法

如果我正确理解了您的问题,这应该会有所帮助:

library(dplyr)

df %>%
  group_by(ID) %>%
  mutate(
    Date = First_Date + cumsum(Time)
  )
,

这是使用ave

的基本R选项
within(
  df,Date <- First_Date + ave(Time,ID,FUN = cumsum)
)

给予

       ID       Date Time First_Date Year
1 ooo-207 1982-05-09    0 1982-05-09 1982
2 ooo-207 1982-05-21   12 1982-05-09 1982
3 ooo-207 1982-06-02   12 1982-05-09 1982
4 ooo-207 1982-06-12   10 1982-05-09 1982
5 ooo-207 1982-06-24   12 1982-05-09 1982
6 ooo-208 1982-07-06    0 1982-07-06 1982
7 ooo-208 1982-07-16   10 1982-06-12 1982
8 ooo-208 1982-07-27   11 1982-06-12 1982
9 ooo-208 1982-08-07   11 1982-06-12 1982

数据

> dput(df)
structure(list(ID = c("ooo-207","ooo-207","ooo-208","ooo-208"),Date = structure(c(4511,4511,4535,4569,4570,4571,4603),class = "Date"),Time = c(0L,12L,10L,0L,11L,11L),First_Date = structure(c(4511,4545,4545),Year = c(1982L,1982L,1982L)),row.names = c("1","2","3","4","5","6","7","8","9"),class = "data.frame")
,

使用data.table

library(data.table)
setDT(df)[,Date := First_Date + cumsum(Time),ID]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...