首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用as.POSIXlt进行数据处理

使用as.POSIXlt进行数据处理
EN

Stack Overflow用户
提问于 2014-06-04 20:15:26
回答 4查看 182关注 0票数 1

我正试着找出最近的星期天到今天。

我今天的定义是:

代码语言:javascript
复制
dt <- as.Date("2014-06-04")

我可以通过以下方式找到最后一个星期天:

代码语言:javascript
复制
dt - as.POSIXlt(dt)$wday
[1] "2014-06-01"

我可以通过以下方式找到下一个星期天:

代码语言:javascript
复制
dt + as.POSIXlt(dt)$wday
[1] "2014-06-07"

不确定为什么以下内容不起作用:

代码语言:javascript
复制
ifelse(as.POSIXlt(dt)$wday <= 3, 
       dt - as.POSIXlt(dt)$wday, 
       dt + as.POSIXlt(dt)$wday)
[1] 16222

我得到了一个号码:16222而不是约会。

下列每一项声明都按预期工作:

代码语言:javascript
复制
as.POSIXlt(dt)$wday
class(as.POSIXlt(dt)$wday)
as.POSIXlt(dt)$wday <= 3

有什么主意吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-06-04 20:20:33

看来,ifelse返回一个向量并从日期中剥离"POSIX“类。为什么不做呢

代码语言:javascript
复制
dt + ifelse(as.POSIXlt(dt)$wday <= 3, -1, 1) * as.POSIXlt(dt)$wday

而不是。

票数 1
EN

Stack Overflow用户

发布于 2014-06-04 20:21:21

另一种解决方案:通过调用类属性(例如:

代码语言:javascript
复制
structure(ifelse(as.POSIXlt(dt)$wday <= 3, 
       dt - as.POSIXlt(dt)$wday, 
       dt + as.POSIXlt(dt)$wday), class="Date")
票数 2
EN

Stack Overflow用户

发布于 2014-06-04 20:51:46

这里不需要使用ifelse,经典的if/else将完成以下工作:

代码语言:javascript
复制
if(as.POSIXlt(dt)$wday <= 3) dt - as.POSIXlt(dt)$wday else dt + as.POSIXlt(dt)$wday
[1] "2014-06-01"

或者更简单:

代码语言:javascript
复制
wday <- as.POSIXlt(dt)$wday 
dt + if(wday<= 3) -wday else wday
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24046759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档