首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POSIXct和sapply的向量

POSIXct和sapply的向量
EN

Stack Overflow用户
提问于 2010-07-07 03:29:27
回答 1查看 1K关注 0票数 2

如果您想对POSIXct对象列表应用format以外的函数,该怎么办?例如,假设我想要取一个时间向量,将这些时间截断为小时,并对每个时间应用一个任意函数。

代码语言:javascript
复制
> obs.times=as.POSIXct(c('2010-01-02 12:37:45','2010-01-02 08:45:45','2010-01-09 14:45:53'))
> obs.truncated=trunc(obs.times, units="hours")
> obs.truncated
[1] "2010-01-02 12:00:00 EST" "2010-01-02 08:00:00 EST"
[3] "2010-01-09 14:00:00 EST"

现在,我希望obs.truncated的长度是3,但是

代码语言:javascript
复制
> length(obs.truncated)
[1] 9

所以你可以看到,尝试将一个函数apply到这个向量是行不通的。obs.truncated的类是

代码语言:javascript
复制
> class(obs.truncated)
[1] "POSIXt"  "POSIXlt"

知道这里发生了什么吗?applylength似乎将向量的第一个元素作为自己的列表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-07 04:05:55

这样的POSIXlt的length()过去被报告为9,但最近得到了更正。

而且,当我执行trunc(obs.times)时,错误的事情发生了-- trunc()只对三个元素的字符串操作一次。你确实需要apply()等人的帮助。

下面是一个使用sapply()进行组件重置的示例:

代码语言:javascript
复制
> sapply(obs.times, function(.) {
+ p <- as.POSIXlt(.); 
+ p$min <- p$sec <- 0; 
+ format(p) })
[1] "2010-01-02 12:00:00" "2010-01-02 08:00:00" "2010-01-09 14:00:00"
> 

鉴于

代码语言:javascript
复制
> trunc(obs.times, units="hours")
[1] "2010-01-02 12:00:00 CST" "2010-01-02 08:00:00 CST"
[3] "2010-01-09 14:00:00 CST"
> class(trunc(obs.times, units="hours"))
[1] "POSIXt"  "POSIXlt"
> length(trunc(obs.times, units="hours"))
[1] 1
> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3189538

复制
相关文章

相似问题

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