如何减去每行R的时间

时间:2016-10-02 00:12:50

标签: r date row intervals subtraction

我在mac中使用R studio。我已将df定义如下。谁能帮我计算每一行的时间间隔?

> df                       
                       V1                  V1.1
1   "2016-05-12 07:28:11" "2016-05-12 07:58:47"
2   "2016-05-12 07:27:39" "2016-05-12 07:58:22"
3   "2016-05-12 07:19:22" "2016-05-12 07:49:40"
4   "2016-05-12 07:15:12" "2016-05-12 07:47:08"
5   "2016-05-12 07:26:44" "2016-05-12 07:58:24"
6   "2016-05-12 07:27:53" "2016-05-12 07:58:33"
7   "2016-05-12 07:20:20" "2016-05-12 07:53:19"
8   "2016-05-12 07:28:58" "2016-05-12 08:01:56"

3 个答案:

答案 0 :(得分:0)

如果您不知道类型或字符串,使用lubridate包非常方便,然后您可以在将日期转换为您喜欢的格式后轻松操作日期。以防万一:

df$diff <- ymd_hms(df$date2) - ymd_hms(df$date1)
> df
            date1               date2       dif
1 2016-05-12 07:28:11 2016-05-12 07:58:47 30.6 mins

这将创建一个包含difftime类对象的列。如果您想要以秒为单位的差异,例如:

df$dif <- as.integer((ymd_hms(df$date2) - ymd_hms(df$date1))*60)
> df
            date1               date2  dif
1 2016-05-12 07:28:11 2016-05-12 07:58:47 1836

请注意,ymd_hms()函数用于以年 - 月 - 日 - 小时 - 分 - 秒的格式解析字符串日期。任何订单都有变化,有或没有时间。

希望这有帮助

答案 1 :(得分:0)

您可以使用as.period包中的lubridate函数来查找每行的时间间隔。为了将日期转换为mutate个对象,POSIXct的前两个参数是必需的。

library(lubridate)
library(dplyr)

df <- df %>% mutate(V1 = ymd_hms(V1), 
                    V1.1 = ymd_hms(V1.1), 
                    interval = as.period(V1.1 - V1))

请注意,您会收到警告,告诉您它是estimate only: convert difftimes to intervals for accuracy。如果您担心准确性,只需将最后一行更改为

即可
interval = as.period(interval(V1, V1.1))

答案 2 :(得分:-2)

首先,您必须将这些字符转换为日期类。运行这个:

for (i in nrow(df)){
    for (j in ncol(df)){
        df[i, j] <- strptime(df[i, j], "%y/%m/%d %H:%M:%S")
    }
}

之后,您可以减去col1和col2并将结果放在数字向量中:

dif.time.vec <- numeric(length = nrow(df))
for (i in nrow(df)){
    dif.time.vec[i] <- df[i, 2] - df[i, 1]
}