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 - Fatal编程技术网

计算r中两个日期之间的天数

计算r中两个日期之间的天数,r,R,我需要以两种方式计算多个日期之间经过的天数,然后将这些结果输出到新列:I)与第一个日期相比经过的天数(例如,results$first)和ii)连续日期之间经过的天数(例如,results$between)。下面是一个具有预期结果的示例。提前谢谢 library(lubridate) DATA = data.frame(DATE = mdy(c("7/8/2013", "8/1/2013", "8/30/2013", "10/23/2013",

我需要以两种方式计算多个日期之间经过的天数,然后将这些结果输出到新列:I)与第一个日期相比经过的天数(例如,results$first)和ii)连续日期之间经过的天数(例如,results$between)。下面是一个具有预期结果的示例。提前谢谢

library(lubridate)

DATA = data.frame(DATE = mdy(c("7/8/2013",  "8/1/2013", "8/30/2013", "10/23/2013", 
                                   "12/16/2013", "12/16/2015")))

RESULTS  = data.frame(DATE = mdy(c("7/8/2013",  "8/1/2013", "8/30/2013", "10/23/2013", 
                                       "12/16/2013", "12/16/2015")), 
                  FIRST = c(0, 24, 53, 107, 161, 891), BETWEEN = c(0, 24, 29, 54, 54, 730))
第一部分:

DATA = data.frame((c("7/8/2013",  "8/1/2013", "8/30/2013", "10/23/2013","12/16/2013", "12/16/2015")))
names(DATA)[1] = "V1"
date = as.Date(DATA$V1, format="%m/%d/%Y")
print(date-date[1])
结果:

[1]   0  24  53 107 161 891

对于第二部分-只需使用
For
循环

这将得到您想要的:


d您可以使用简单的
difftime
和滞后的
diff
计算来添加每一列

DATA$FIRST <- c(0, 
                with(DATA, 
                     difftime(DATE[2:length(DATE)],DATE[1], unit="days")
                     )
                )
DATA$BETWEEN <- c(0, 
                  with(DATA, 
                       diff(DATE[1:(length(DATE) - 1)], unit="days")
                       )
                  )

identical(DATA, RESULTS)
[1] TRUE

DATA$首先感谢大家!我应该在问题中提到这一点,但我正在尝试编写灵活的代码(例如,数据集之间的日期数可能会改变)和避免for循环。因此,尽管所有答案都有效,但度量答案似乎是最灵活的。再次感谢,保重!
#Using dplyr package
library(dplyr)
df1 %>%  # your dataframe
mutate(BETWEEN0=as.numeric(difftime(DATE,lag(DATE,1))),BETWEEN=ifelse(is.na(BETWEEN0),0,BETWEEN0),FIRST=cumsum(as.numeric(BETWEEN)))%>%
select(-BETWEEN0)
            DATE BETWEEN FIRST
    1 2013-07-08       0     0
    2 2013-08-01      24    24
    3 2013-08-30      29    53
    4 2013-10-23      54   107
    5 2013-12-16      54   161
    6 2015-12-16     730   891