[英]using ifelse with Dates in R
我有一個日期向量,如果它在另一個向量之前,我想將日期設置為 NA。
我試過ifelse(date_vector1>=date_vector2, date_vector1, NA)
,但 output 不是 Date 並且應用as.Date()
返回錯誤。
然后我嘗試dplyr::if_else(date_vector1>=date_vector2, date_vector1, NA_real_)
,但它返回相同的錯誤。
錯誤是這個:
as.Date.numeric(value) 中的錯誤:必須提供“原點”
如何使用帶有日期的ifelse
語句?
我們可以使用data.table
創建一個新列
library(data.table)
setDT(df1)[date_vector1>= date_vector2, newcol := date_vector1]
df1
# date_vector1 date_vector2 newcol
#1: 2017-05-29 2017-05-13 2017-05-29
#2: 2017-05-22 2017-05-26 <NA>
#3: 2017-05-26 2017-05-18 2017-05-26
#4: 2017-05-28 2017-05-14 2017-05-28
#5: 2017-05-25 2017-05-27 <NA>
如果這兩個都是向量而不是 data.frame/data.table 中的變量,則執行
i1 <- date_vector1>= date_vector2
newvector <- date_vector2
newvector[i1] <- date_vector1[i1]
newvector[!i1] <- NA
newvector
#[1] "2017-05-29" NA "2017-05-26" "2017-05-28" NA
最好不要在Date
上使用ifelse
,因為日期存儲為整數,它將強制轉換為integer
as.Date(..., origin = '1970-01-01')
,我們可能必須將其轉換回Date
class 再次使用as.Date(..., origin = '1970-01-01')
set.seed(24)
date_vector1 <- sample((Sys.Date() - 1:10), 5, replace = FALSE)
date_vector2 <- sample((Sys.Date() - 1:20), 5, replace = FALSE)
df1 <- data.frame(date_vector1, date_vector2)
這是因為ifelse
剝離了 class 屬性。 您可以使用例如恢復它
date_vector3 <- ifelse(date_vector1>=date_vector2, date_vector1, NA)
class(date_vector3) <- "Date"
當其中一種情況是固定值時,我通常使用 go replace()
:
date1 <- Sys.Date() + c(-1, 0, 1)
date2 <- Sys.Date() + c(0, 0, 0)
replace(date1, which(date1 < date2), NA)
#> [1] NA "2022-02-25" "2022-02-26"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.