2016-11-07 32 views
2

我有POSIXct数据的载体,要计算连续元素之间的差别,就像它是由diff比较差异POSIXct与单位,像difftime

完成如:

burst <- as.POSIXct(c("2016-11-07 17:20:52","2016-11-07 16:21:52", "2016-11-07 15:21:52", "2016-11-02 17:20:52","2016-11-02 16:21:52", "2016-11-02 15:21:52")) 

conti <- as.POSIXct(c("2016-11-07 17:20:52","2016-11-06 17:20:52", "2016-11-05 17:20:52", "2016-11-04 17:20:52","2016-11-03 17:20:52", "2016-11-02 17:20:52")) 

diff(burst) 
diff(conti) 

我的问题是,单位不相等。我记得difftime这个函数有一个叫做unit的参数,但是我不能构造一个apply函数来得到类似于diff的simiral行为。

+0

我没有得到你的问题;请分享你想要的样本输出! –

回答

0

我不确定是否有办法对POSIXt对象执行特定单位diff。如果没有,可以直接使用数值,然后设置类和单位属性,这样您仍然会拥有带有单位属性的difftime对象。

例如,获得差异分钟:

burst.diff = diff(as.numeric(burst))/60 
burst.diff = as.difftime(burst.diff, units="mins") 

burst.diff 
Time differences in mins 
[1] -59 -60 -7141 -59 -60 

如果你不关心维护对象类或单位,那么你可以这样做:

burst.diff = diff(as.numeric(burst))/60 

您可以将其作为函数打包。我不知道这是如何我已经处理类术语的“正确”的方法和属性,我很想知道,如果有更好的方法来做到这一点:

my_difftime = function(x, units="mins") { 

    div = c("secs"=1, "mins"=60, "hours"=3600) 

    if(is.na(match(units, names(div)))) { 
    stop('Please specify either units as either "secs", "mins", or "hours"') 
    } else { 
    x = diff(as.numeric(x))/div[match(units, names(div))] 
    as.difftime(x, units=units) 
    } 
} 

lapply(list(burst=burst, conti=conti), my_difftime, units="hours") 
$burst 
Time differences in hours 
[1] -0.9833333 -1.0000000 -119.0166667 -0.9833333 -1.0000000 

$conti 
Time differences in hours 
[1] -24 -25 -24 -24 -24