Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中行的交错加法_R_Data Manipulation - Fatal编程技术网

R中行的交错加法

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

我有一个数据库,有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 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]