如何防止ifell()將日期對象轉換為數字對象我正在使用這個函數ifelse()操作日期向量。我預期成績會很好Date他驚訝地發現numeric而是向量。以下是一個例子:dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'))dates
<- ifelse(dates == '2011-01-01', dates - 1, dates)str(dates)這特別令人驚訝,因為執行整個向量的操作將返回Date對象。dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04','2011-01-05'))dates <- dates - 1str(dates)我應該使用其他功能來操作嗎?Date矢量?如果是,什么功能?如果沒有,我如何強制ifelse返回與輸入類型相同的向量?的幫助頁ifelse這表明這是一個特性,而不是一個bug,但我仍然很難為我發現的令人驚訝的行為找到一個解釋。
3 回答

Helenr
TA貢獻1780條經驗 獲得超4個贊
dplyr::if_else
.
dplyr 0.5.0
if_else
ifelse()
true
false
library(dplyr)dates <- if_else(dates == '2011-01-01', dates - 1, dates)str(dates)# Date[1:5], format: "2010-12-31" "2011-01-02" "2011-01-03" "2011-01-04" "2011-01-05"

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
ifelse
:
長度和屬性相同的向量(包括維度和“ class
“) test
的值和數據值。 yes
或 no
..答案的模式將被迫從邏輯上首先容納任何從 yes
然后任何從 no
.
ifelse
dates[dates == '2011-01-01'] <- dates[dates == '2011-01-01'] - 1str(dates)# Date[1:5], format: "2010-12-31" "2011-01-02" "2011-01-03" "2011-01-04" "2011-01-05"
safe.ifelse
:
safe.ifelse <- function(cond, yes, no){ class.y <- class(yes) X <- ifelse(cond, yes, no) class(X) <- class.y; return(X)}safe.ifelse(dates == '2011-01-01', dates - 1, dates)# [1] "2010-12-31" "2011-01-02" "2011-01-03" "2011-01-04" "2011-01-05"
if_else
- 3 回答
- 0 關注
- 567 瀏覽
添加回答
舉報
0/150
提交
取消