[英]Calculate number of days between two dates in r
我需要以兩種方式計算多個日期之間經過的天數,然后將這些結果輸出到新列:i)與第一個日期相比已經過的天數(例如,結果$ FIRST)和ii)順序之間日期(例如,結果$ 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))
#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
這將為您提供您想要的:
d <- as.Date(DATA$DATE, format="%m/%d/%Y")
first <- c()
for (i in seq_along(d))
first[i] <- d[i] - d[1]
between <- c(0, diff(d))
這使用基礎包中的as.Date()
函數,使用給定的格式將字符串日期的向量as.Date()
為日期值。 由於日期為月/日/年,因此請指定format="%m/%d/%Y"
以確保其正確解釋。
diff()
是滯后的差異。 由於它滯后,它不包括元素1和它自身之間的差異,因此你可以連接0。
默認情況下, Date
對象之間的差異以天為單位。
然后構造輸出數據幀很簡單:
RESULTS <- data.frame(DATE=DATA$DATE, FIRST=first, BETWEEN=between)
第一部分:
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
循環
您可以使用簡單的difftime
和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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.