【问题标题】:Units of time calculation in RR中的时间单位计算
【发布时间】:2018-04-26 18:54:21
【问题描述】:

这是我拥有的数据示例。我有带有读取日期的列。我使用函数 as.POSIXct() 将 readdate 列转换为日期格式。

data$readdate=as.POSIXct(data$readdate,format="%Y-%m-%d %H:%M:%S")

ID   readdate                   tdiff
A    2016-06-01 06:00:06          0
B    2016-06-01 06:01:06          1
C    2016-06-01 06:03:06          2
D    2016-06-01 06:04:06          1
E    2016-06-01 06:04:56          50
F    2016-06-01 08:04:56          2

我需要第三列 tdiff 来显示两个 ID 之间经过的时间。我使用了一个循环和

for(i in 1:nrow(data)){
tdiff=data$readdate[i+1]-data$readdate[i]}

使用这种方法的问题是 R 将时间单位四舍五入。我希望 tdiff 列包含类似于此的单一类型的单位(例如秒或分钟)

ID   readdate                   tdiff(seconds)  or tdiff(mins)
A    2016-06-01 06:00:06          0                    0
B    2016-06-01 06:01:06          60                   1
C    2016-06-01 06:03:06          120                  2
D    2016-06-01 06:04:06          60                   1
E    2016-06-01 06:04:56          50                   0.5
F    2016-06-01 08:04:56          7200                 120

我需要它们都相似,因为稍后我必须提取所有 tdiff 大于 30 分钟的 ID。

【问题讨论】:

  • 你确定E行应该是40而不是50?
  • 应该只是diff 操作 - c(0, diff(dat$readdate)) 也许?
  • 是的@storaged ,它是50

标签: r datetime for-loop time posix


【解决方案1】:

我认为最简单的方法是将difftimec("auto", "secs", "mins", "hours", " days", "weeks") 中您想要的单位一起使用

秒用:

difftime(data$readdate[i+1], data$readdate[i], units="secs")

【讨论】:

  • 这就是我要找的@storaged,谢谢!
【解决方案2】:

这应该只是一个diff 操作,它将分派到diff.POSIXt

dif <- diff(dat$readdate)
dif
#Time differences in secs
#[1]   60  120   60   50 7200
c(0, dif)
#[1]    0   60  120   60   50 7200

如果您需要更改测量单位,只需使用units&lt;-

units(dif) <- "mins"
c(0, dif)
#[1]   0.0000000   1.0000000   2.0000000   1.0000000   0.8333333 120.0000000

如果您很棘手,也可以在线执行此操作:

c(0, `units<-`(diff(dat$readdate), "mins"))
#[1]   0.0000000   1.0000000   2.0000000   1.0000000   0.8333333 120.0000000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多