R中行的交错加法
我有一个数据库,有10000个条目,我需要更正日期。每行按ID和年份编制索引。事件和开始日期之间的时间是正确的,但日期是错误的。我的数据集示例如下:R中行的交错加法,r,data-manipulation,R,Data Manipulation,我有一个数据库,有10000个条目,我需要更正日期。每行按ID和年份编制索引。事件和开始日期之间的时间是正确的,但日期是错误的。我的数据集示例如下: 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 o
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)
)
数据
> dput(df)
structure(list(ID = c("ooo-207", "ooo-207", "ooo-207", "ooo-207",
"ooo-207", "ooo-208", "ooo-208", "ooo-208", "ooo-208"), Date = structure(c(4511,
4511, 4535, 4535, 4535, 4569, 4570, 4571, 4603), class = "Date"),
Time = c(0L, 12L, 12L, 10L, 12L, 0L, 10L, 11L, 11L), First_Date = structure(c(4511,
4511, 4511, 4511, 4511, 4569, 4545, 4545, 4545), class = "Date"),
Year = c(1982L, 1982L, 1982L, 1982L, 1982L, 1982L, 1982L,
1982L, 1982L)), row.names = c("1", "2", "3", "4", "5", "6",
"7", "8", "9"), class = "data.frame")
使用
数据表
library(data.table)
setDT(df)[, Date := First_Date + cumsum(Time), ID]
你的6号线对吗?这不是第一次约会吗?你是对的,谢谢你的注意。我已经改正了。我正在写这篇文章。我想你需要一个
分组人(ID)
,否则我就是这么想的;我的大脑直接开始使用for循环。
library(data.table)
setDT(df)[, Date := First_Date + cumsum(Time), ID]