【问题标题】:Substract dates in one column by ID按 ID 减去一列中的日期
【发布时间】:2018-04-12 07:16:49
【问题描述】:

我是 R 和这个网站的新手。我试图在此站点上搜索以找到解决问题的方法,但找不到。我的问题如下:

如何计算 ID 为“1”的日期与 ID 为“0”的上一个日期之间的差异。那么 ID 为“2”的日期与 ID 为“0”的上一个日期之间的差异,等等?我想将此差异作为新列“差异”添加到我的数据表中。

此外,当计算“1”或“2”ID 与“0”之间的差异时,我希望有一个名为“Performed_Date”的列显示与 ID(1,2 等)对应的日期'标识。

此外,当 ID(例如 ID '2' 和 ID '3')之间没有 '0' ID 时,它应该计算最高 ID(在本例中为'3')与上一个日期之间的差ID 为“0”。

我的数据表如下:

Registration  Date       ID   CBI   TBI
A118          7-3-2017   0    NA    NA
A118          8-3-2017   0    NA    NA
A118          9-3-2017   1    5     10
A118          10-3-2017  0    NA    NA
A118          11-3-2017  2    8     16
A118          12-3-2017  3    9     18
A118          13-3-2017  0    NA    NA
A118          14-3-2017  4    5     10

我的预期输出如下:

Registration  Date       ID   CBI   TBI  Difference  Performed_Date
A118          7-3-2017   0    NA    NA   1           9-3-2017          
A118          8-3-2017   0    NA    NA   1           11-3-2017
A118          9-3-2017   1    5     10   2           12-3-2017
A118          10-3-2017  0    NA    NA   1           14-3-2017
A118          11-3-2017  2    8     16   
A118          12-3-2017  3    9     18
A118          13-3-2017  0    NA    NA
A118          14-3-2017  4    5     10

我认为它应该是带有 ave 函数的 for 循环的东西,但我想不出可以计算它的东西。有人可以告诉我如何计算这个吗?

【问题讨论】:

    标签: r date for-loop datatable difference


    【解决方案1】:

    你来了,

    数据:

    df<-
    data.table::fread("
    Registration  Date       ID   CBI   TBI
    A118          7-3-2017   0    NA    NA
    A118          8-3-2017   0    NA    NA
    A118          9-3-2017   1    5     10
    A118          10-3-2017  0    NA    NA
    A118          11-3-2017  2    8     16
    A118          12-3-2017  3    9     18
    A118          13-3-2017  0    NA    NA
    A118          14-3-2017  4    5     10")
    

    代码:

    df$Date <- as.Date(df$Date,format="%d-%m-%Y")
    
    nonZeroIDs <- which(df$ID != 0)
    relatedIDs <- sapply(nonZeroIDs,function(x){
                      for(i in x:1) if(df$ID[i] == 0) return(i)
                      })
    
    diffs <- df$Date[nonZeroIDs] - df$Date[relatedIDs]
    
    result<- data.frame(Difference=diffs,Performed_Date=df$Date[nonZeroIDs])
    

    结果:

      Difference Performed_Date
    1     1 days     2017-03-09
    2     1 days     2017-03-11
    3     2 days     2017-03-12
    4     1 days     2017-03-14
    

    【讨论】:

    • 非常感谢,它正是我想要的 :)
    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2021-03-28
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多