如何防止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 回答
![?](http://img1.sycdn.imooc.com/545850a00001fdd002200220-100-100.jpg)
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"
![?](http://img1.sycdn.imooc.com/5458477f0001cabd02200220-100-100.jpg)
沧海一幻觉
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 关注
- 531 浏览
添加回答
举报
0/150
提交
取消