我在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"
答案 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]
}