如何解决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
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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。