亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何防止ifell()將日期對象轉換為數字對象

如何防止ifell()將日期對象轉換為數字對象

白板的微信 2019-07-02 10:49:03
如何防止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()*truefalse參數必須是相同的類型。這提供了一種不太令人驚訝的返回類型,并保留S3向量,如日期" .

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"


查看完整回答
反對 回復 2019-07-02
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

它與文件有關價值ifelse:

長度和屬性相同的向量(包括維度和“class“)test的值和數據值。yesno..答案的模式將被迫從邏輯上首先容納任何從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進入數據整形包的magrittr/dplyr/tidyr復合體中。


查看完整回答
反對 回復 2019-07-02
  • 3 回答
  • 0 關注
  • 567 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號