如何防止ifell()將日期對(duì)象轉(zhuǎn)換為數(shù)字對(duì)象我正在使用這個(gè)函數(shù)ifelse()操作日期向量。我預(yù)期成績(jī)會(huì)很好Date他驚訝地發(fā)現(xiàn)numeric而是向量。以下是一個(gè)例子: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)這特別令人驚訝,因?yàn)閳?zhí)行整個(gè)向量的操作將返回Date對(duì)象。dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04','2011-01-05'))dates <- dates - 1str(dates)我應(yīng)該使用其他功能來操作嗎?Date矢量?如果是,什么功能?如果沒有,我如何強(qiáng)制ifelse返回與輸入類型相同的向量?的幫助頁(yè)ifelse這表明這是一個(gè)特性,而不是一個(gè)bug,但我仍然很難為我發(fā)現(xiàn)的令人驚訝的行為找到一個(gè)解釋。
3 回答

Helenr
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
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貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
ifelse
:
長(zhǎng)度和屬性相同的向量(包括維度和“ class
“) test
的值和數(shù)據(jù)值。 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 關(guān)注
- 558 瀏覽
添加回答
舉報(bào)
0/150
提交
取消