首页 > 解决方案 > 来自包chron奇怪格式的R函数times()

问题描述

非常简单的操作“times(3/24)”与包 chron 中的 times 函数导致:

> times(3/24)  
[1] 03:00:00

当我在数据框中使用它时,它不会导致正确的格式。相反,它会写入原始数字“0.125”。但是,当我将它包含在 ifelse() 语句中时,它会起作用。

参见示例:

> X<-seq(1,10,1)  
> tdata<-as.data.frame(X)  
> tdata$T3AM<-times(3/24)  
> tdata$T3AMx<-times(ifelse(tdata$X>0,3/24,3/24))  
> tdata  
    X  T3AM    T3AMx  
1   1 0.125 03:00:00  
2   2 0.125 03:00:00  
3   3 0.125 03:00:00  
4   4 0.125 03:00:00  
5   5 0.125 03:00:00  
6   6 0.125 03:00:00  
7   7 0.125 03:00:00  
8   8 0.125 03:00:00  
9   9 0.125 03:00:00  
10 10 0.125 03:00:00    

对此有什么解释吗?

标签: rchron

解决方案


问题是"times"chron 中的类不提供rep方法。如果我们添加一个,那么它可以工作。

library(chron)
rep.times <- function(x, ...) times(rep(as.numeric(x), ...))

# from question:    
X <- seq(1,10,1)
tdata <- as.data.frame(X)
tdata$T3AM <- times(3/24)
tdata$T3AMx <- times(ifelse(tdata$X>0,3/24,3/24))

给予:

> tdata  
    X     T3AM    T3AMx
1   1 03:00:00 03:00:00
2   2 03:00:00 03:00:00
3   3 03:00:00 03:00:00
4   4 03:00:00 03:00:00
5   5 03:00:00 03:00:00
6   6 03:00:00 03:00:00
7   7 03:00:00 03:00:00
8   8 03:00:00 03:00:00
9   9 03:00:00 03:00:00
10 10 03:00:00 03:00:00

请注意,Kurt 刚​​刚添加rep.times到 chron 2.3-53,现在应该在 CRAN 上。


推荐阅读