试图获取R中两个时间点之间的时差。我在数据集中有NAs,我找不到正确的方法
我的数据当前位于两个单独的列中 T1示例看起来像2020-05-01 09:00:00 PM T2示例的时间为2020-05-02 04:00:00 AM 此数据还包含NAs 数据模式和类为字符 我想知道这两者的区别,以小时为单位 我试过这样的函数试图获取R中两个时间点之间的时差。我在数据集中有NAs,我找不到正确的方法,r,time,difftime,R,Time,Difftime,我的数据当前位于两个单独的列中 T1示例看起来像2020-05-01 09:00:00 PM T2示例的时间为2020-05-02 04:00:00 AM 此数据还包含NAs 数据模式和类为字符 我想知道这两者的区别,以小时为单位 我试过这样的函数 df$TimeElapsedhours <- NA for (i in 1:nrow(df)) { if (!is.na(df$T1[i])) { df$TimeElapsedDays[i] <- difftime(df$T2
df$TimeElapsedhours <- NA
for (i in 1:nrow(df)) {
if (!is.na(df$T1[i])) {
df$TimeElapsedDays[i] <- difftime(df$T2[i], df$T1[i], units = c("hours"))
}
}
df$timeelapsedhurs我们不需要来执行
循环,我们可以使用润滑
来解析日期时间,并从dplyr
进行变异
library(dplyr)
library(lubridate)
df <- data.frame(T1 = parse_date_time(c("2020-05-01 09:00:00 PM",
"2020-05-01 10:48:00 PM"),
'%Y-%m-%d %I:%M:%S %p'),
T2 = parse_date_time(c("2020-05-02 04:00:00 AM",
"2020-05-02 05:45:00 AM"),
'%Y-%m-%d %I:%M:%S %p'))
df <- df %>% mutate(TimeElapsedDays = difftime(df$T2, df$T1, units = c("hours")))
对于NAs,这将在以下时间间隔天数列中给出NA
df1 <- data.frame(T1 = parse_date_time(c("2020-05-01 09:00:00 PM",NA), '%Y-%m-%d %I:%M:%S %p'),
T2 = parse_date_time(c("2020-05-02 04:00:00 AM","2020-05-02 04:00:00 AM"), '%Y-%m-%d %I:%M:%S %p'))
df2 <- df1 %>% mutate(TimeElapsedDays = difftime(df1$T2, df1$T1, units = c("hours")))
> df2
T1 T2 TimeElapsedDays
1 2020-05-01 21:00:00 2020-05-02 04:00:00 7 hours
2 <NA> 2020-05-02 04:00:00 NA hours
df1-df2
T1 T2时间间隔天数
1 2020-05-01 21:00:00 2020-05-02 04:00:00 7小时
2020-05-02 04:00:00北美时间
但我们可以把它去掉
df2 <- na.omit(df2)
df2
> df2
T1 T2 TimeElapsedDays
1 2020-05-01 21:00:00 2020-05-02 04:00:00 7 hours
df2-df2
T1 T2时间间隔天数
1 2020-05-01 21:00:00 2020-05-02 04:00:00 7小时
请按照标签主页顶部的要求,使用dput
提供可复制的输入数据。如果没有可复制的示例,我们将无法为您提供帮助。我仍然遇到同样的问题。例如,该代码告诉我,“2020-05-01 10:48:00 PM”和“2020-05-02 05:45:00 AM”之间的差异为18.95小时。它应该是:6.95我还需要它来保持时间部分的小时和分钟。因此,我只是保留了我的格式,并将其输入到公式中,就像我编辑了我的答案一样。对不起,我没有看到第一个版本给出了错误的答案!
df1 <- data.frame(T1 = parse_date_time(c("2020-05-01 09:00:00 PM",NA), '%Y-%m-%d %I:%M:%S %p'),
T2 = parse_date_time(c("2020-05-02 04:00:00 AM","2020-05-02 04:00:00 AM"), '%Y-%m-%d %I:%M:%S %p'))
df2 <- df1 %>% mutate(TimeElapsedDays = difftime(df1$T2, df1$T1, units = c("hours")))
> df2
T1 T2 TimeElapsedDays
1 2020-05-01 21:00:00 2020-05-02 04:00:00 7 hours
2 <NA> 2020-05-02 04:00:00 NA hours
df2 <- na.omit(df2)
df2
> df2
T1 T2 TimeElapsedDays
1 2020-05-01 21:00:00 2020-05-02 04:00:00 7 hours