从timeSpan类SPLUS到POSIXlt类R

时间:2017-03-06 09:23:02

标签: r lubridate s-plus

我正在尝试将带有SPLUS类的timeSpan数据转换为带有R类的POSIXlt数据。我查看了lubridate包,但找不到办法。 R无法检测timeSpan类,因此当我尝试使用数据创建变量时,它会发出错误。

lubridate包帮助文件?'lubridate-package'表示

  

Lubridate区分时刻(称为瞬间)   和时间跨度(称为时间跨度,参见Timespan级)。时间   跨度进一步分为Duration-class,Period-class和   区间类对象。

我也从包开发人员编写的lubridate article寻求帮助,但找不到解决方法。可以在timeSpan中将SPLUSposixlt类转换为R类吗?

SPLUS数据:

"span" = new("timeSpan", .Data = list(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7,
    7, 30, 30, 91, 91, 365, 1826, 9131, 36525),
    c(1, 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 5000, 15000, 60000, 60000, 
    300000, 300000, 900000, 900000, 3600000, 10800000, 10800000, 21600000,
    0, 0, 0, 37800000, 37800000, 27000000, 27000000, 21600000, 21600000,
    21600000, 0)),
   .Data.names = c("julian.day", "milliseconds"),
   .Data.classes = new("CLASS",c("integer", "integer")),
   format = "%dd %Hh %Mm %Ss %NMS")

在SPLUS工作台上进行评估后的数据外观:

span
 [1] 0d 0h 0m 0s 1MS     0d 0h 0m 0s 1MS     0d 0h 0m 0s 2MS    
 [4] 0d 0h 0m 0s 5MS     0d 0h 0m 0s 10MS    0d 0h 0m 0s 25MS   
 [7] 0d 0h 0m 0s 50MS    0d 0h 0m 0s 100MS   0d 0h 0m 0s 250MS  
[10] 0d 0h 0m 0s 500MS   0d 0h 0m 1s 0MS     0d 0h 0m 5s 0MS    
[13] 0d 0h 0m 15s 0MS    0d 0h 1m 0s 0MS     0d 0h 1m 0s 0MS    
[16] 0d 0h 5m 0s 0MS     0d 0h 5m 0s 0MS     0d 0h 15m 0s 0MS   
[19] 0d 0h 15m 0s 0MS    0d 1h 0m 0s 0MS     0d 3h 0m 0s 0MS    
[22] 0d 3h 0m 0s 0MS     0d 6h 0m 0s 0MS     1d 0h 0m 0s 0MS    
[25] 7d 0h 0m 0s 0MS     7d 0h 0m 0s 0MS     30d 10h 30m 0s 0MS 
[28] 30d 10h 30m 0s 0MS  91d 7h 30m 0s 0MS   91d 7h 30m 0s 0MS  
[31] 365d 6h 0m 0s 0MS   1826d 6h 0m 0s 0MS  9131d 6h 0m 0s 0MS 
[34] 36525d 0h 0m 0s 0MS

R控制台出错:

Error in getClass(Class, where = topenv(parent.frame())) : 
  “timeSpan” is not a defined class

1 个答案:

答案 0 :(得分:1)

将核心list .Data对象从S对象中移出,然后您可以将其操作为R difftime,然后可以从{{1}添加/减去该对象}或POSIXct/lt对象:

Date

out <- Reduce(`+`, Map(as.difftime, Map(`/`, x, c(1,1000)), units=list("days","secs")) ) units(out) <- "days" round(out,4) #Time differences in days # [1] 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 # [7] 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001 #[13] 0.0002 0.0007 0.0007 0.0035 0.0035 0.0104 #[19] 0.0104 0.0417 0.1250 0.1250 0.2500 1.0000 #[25] 7.0000 7.0000 30.4375 30.4375 91.3125 91.3125 #[31] 365.2500 1826.2500 9131.2500 36525.0000 的位置:

x