Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中相邻时间戳之间的时间差_R_Apply_Lubridate - Fatal编程技术网

R中相邻时间戳之间的时间差

R中相邻时间戳之间的时间差,r,apply,lubridate,R,Apply,Lubridate,我正在寻找一种有效的方法来计算给定日期的时间差。我的数据如下: Time_formatted Date Hours_diff 1/20/2016 19:19 1/20/2016 0:46 1/20/2016 18:33 1/20/2016 2:43 1/20/2016 15:50 1/20/2016 1:28 1/20/2016 14:22 1/20/2016 1:50 1/20/2016 12:32 1/20/2016 4:5

我正在寻找一种有效的方法来计算给定日期的时间差。我的数据如下:

Time_formatted  Date    Hours_diff
    1/20/2016 19:19 1/20/2016   0:46
    1/20/2016 18:33 1/20/2016   2:43
    1/20/2016 15:50 1/20/2016   1:28
    1/20/2016 14:22 1/20/2016   1:50
    1/20/2016 12:32 1/20/2016   4:52
    1/20/2016 7:40  1/20/2016   0
    1/19/2016 23:23 1/19/2016   
    1/19/2016 23:06 1/19/2016   
    1/19/2016 22:37 1/19/2016   
    1/19/2016 21:56 1/19/2016   
    1/19/2016 21:05 1/19/2016   
    1/19/2016 17:53 1/19/2016   
    1/19/2016 17:39 1/19/2016   
    1/19/2016 17:01 1/19/2016   
    1/19/2016 15:31 1/19/2016   
我的第一个想法是在R中使用
ave
函数:

ave(data$Time_formatted, data$Date, FUN=difftime)
但是一个明显的错误,
as.POSIXct(time2)中的错误:缺少参数“time2”,使用此函数不会出现默认值。由于数据非常大,循环将效率低下。

有什么办法解决这类问题吗?

首先,我准备好数据。我确保以正确的格式存储日期和时间,并按列
time\u formatted
对数据帧进行排序:

# convert times to POSIXct, dates to Date
data$Time_formatted <- as.POSIXct(data$Time_formatted, format = "%m/%d/%Y %H:%M")
data$Date <- as.Date(data$Date, format = "%m/%d/%Y")
# sort
data <- data[order(data$Time_formatted), ]
最后一步是将时间差从分钟转换为
%H:%M
,如下所示(有关
formatC()
的使用,请参阅):


mins2hm首先,我准备数据。我确保以正确的格式存储日期和时间,并按列
time\u formatted
对数据帧进行排序:

# convert times to POSIXct, dates to Date
data$Time_formatted <- as.POSIXct(data$Time_formatted, format = "%m/%d/%Y %H:%M")
data$Date <- as.Date(data$Date, format = "%m/%d/%Y")
# sort
data <- data[order(data$Time_formatted), ]
最后一步是将时间差从分钟转换为
%H:%M
,如下所示(有关
formatC()
的使用,请参阅):


mins2hm步骤和输出如下:

> df<-read.csv("data.txt",header=T,stringsAsFactors=F)
> df$Time_formatted<-strptime(a$Time_formatted,"%m/%d/%Y %H:%M")
> df$Date          <-strptime(a$Date,"%m/%d/%Y")
> df<-df[order(df$Time_formatted,decreasing=T),] #Make sure it is ordered
> df

        Time_formatted       Date
1  2016-01-20 19:19:00 2016-01-20
2  2016-01-20 18:33:00 2016-01-20
3  2016-01-20 15:50:00 2016-01-20
4  2016-01-20 14:22:00 2016-01-20
5  2016-01-20 12:32:00 2016-01-20
6  2016-01-20 07:40:00 2016-01-20
7  2016-01-19 23:23:00 2016-01-19
8  2016-01-19 23:06:00 2016-01-19
9  2016-01-19 22:37:00 2016-01-19
10 2016-01-19 21:56:00 2016-01-19
11 2016-01-19 21:05:00 2016-01-19
12 2016-01-19 17:53:00 2016-01-19
13 2016-01-19 17:39:00 2016-01-19
14 2016-01-19 17:01:00 2016-01-19
15 2016-01-19 15:31:00 2016-01-19


> df$Hours_diff<-c(-diff(df$Time_formatted),0) # calculate time difference
> df[which(diff(df$Date)!=0),"Hours_diff"]<-0  # set the last timepoint in day to 0
> df$Hours_diff<-ifelse(df$Hours_diff>0,paste(floor(df$Hours_diff/60),df$Hours_diff%%60,sep=":"),0)
> df

        Time_formatted       Date Hours_diff
1  2016-01-20 19:19:00 2016-01-20       0:46
2  2016-01-20 18:33:00 2016-01-20       2:43
3  2016-01-20 15:50:00 2016-01-20       1:28
4  2016-01-20 14:22:00 2016-01-20       1:50
5  2016-01-20 12:32:00 2016-01-20       4:52
6  2016-01-20 07:40:00 2016-01-20          0   
7  2016-01-19 23:23:00 2016-01-19       0:17
8  2016-01-19 23:06:00 2016-01-19       0:29
9  2016-01-19 22:37:00 2016-01-19       0:41
10 2016-01-19 21:56:00 2016-01-19       0:51
11 2016-01-19 21:05:00 2016-01-19       3:12
12 2016-01-19 17:53:00 2016-01-19       0:14
13 2016-01-19 17:39:00 2016-01-19       0:38
14 2016-01-19 17:01:00 2016-01-19       1:30
15 2016-01-19 15:31:00 2016-01-19          0
>df$Time\u格式的df$Date df
时间/格式化日期
1  2016-01-20 19:19:00 2016-01-20
2  2016-01-20 18:33:00 2016-01-20
3  2016-01-20 15:50:00 2016-01-20
4  2016-01-20 14:22:00 2016-01-20
5  2016-01-20 12:32:00 2016-01-20
6  2016-01-20 07:40:00 2016-01-20
7  2016-01-19 23:23:00 2016-01-19
8  2016-01-19 23:06:00 2016-01-19
9  2016-01-19 22:37:00 2016-01-19
10 2016-01-19 21:56:00 2016-01-19
11 2016-01-19 21:05:00 2016-01-19
12 2016-01-19 17:53:00 2016-01-19
13 2016-01-19 17:39:00 2016-01-19
14 2016-01-19 17:01:00 2016-01-19
15 2016-01-19 15:31:00 2016-01-19
>df$Hours_diff df[其中(diff(df$Date)!=0),“Hours_diff”]df$Hours_diff,粘贴(地板(df$Hours_diff/60),df$Hours_diff%%60,sep=“:”,0)
>df
时间\u格式日期小时\u差异
1  2016-01-20 19:19:00 2016-01-20       0:46
2  2016-01-20 18:33:00 2016-01-20       2:43
3  2016-01-20 15:50:00 2016-01-20       1:28
4  2016-01-20 14:22:00 2016-01-20       1:50
5  2016-01-20 12:32:00 2016-01-20       4:52
6  2016-01-20 07:40:00 2016-01-20          0   
7  2016-01-19 23:23:00 2016-01-19       0:17
8  2016-01-19 23:06:00 2016-01-19       0:29
9  2016-01-19 22:37:00 2016-01-19       0:41
10 2016-01-19 21:56:00 2016-01-19       0:51
11 2016-01-19 21:05:00 2016-01-19       3:12
12 2016-01-19 17:53:00 2016-01-19       0:14
13 2016-01-19 17:39:00 2016-01-19       0:38
14 2016-01-19 17:01:00 2016-01-19       1:30
15 2016-01-19 15:31:00 2016-01-19          0

步骤和输出如下:

> df<-read.csv("data.txt",header=T,stringsAsFactors=F)
> df$Time_formatted<-strptime(a$Time_formatted,"%m/%d/%Y %H:%M")
> df$Date          <-strptime(a$Date,"%m/%d/%Y")
> df<-df[order(df$Time_formatted,decreasing=T),] #Make sure it is ordered
> df

        Time_formatted       Date
1  2016-01-20 19:19:00 2016-01-20
2  2016-01-20 18:33:00 2016-01-20
3  2016-01-20 15:50:00 2016-01-20
4  2016-01-20 14:22:00 2016-01-20
5  2016-01-20 12:32:00 2016-01-20
6  2016-01-20 07:40:00 2016-01-20
7  2016-01-19 23:23:00 2016-01-19
8  2016-01-19 23:06:00 2016-01-19
9  2016-01-19 22:37:00 2016-01-19
10 2016-01-19 21:56:00 2016-01-19
11 2016-01-19 21:05:00 2016-01-19
12 2016-01-19 17:53:00 2016-01-19
13 2016-01-19 17:39:00 2016-01-19
14 2016-01-19 17:01:00 2016-01-19
15 2016-01-19 15:31:00 2016-01-19


> df$Hours_diff<-c(-diff(df$Time_formatted),0) # calculate time difference
> df[which(diff(df$Date)!=0),"Hours_diff"]<-0  # set the last timepoint in day to 0
> df$Hours_diff<-ifelse(df$Hours_diff>0,paste(floor(df$Hours_diff/60),df$Hours_diff%%60,sep=":"),0)
> df

        Time_formatted       Date Hours_diff
1  2016-01-20 19:19:00 2016-01-20       0:46
2  2016-01-20 18:33:00 2016-01-20       2:43
3  2016-01-20 15:50:00 2016-01-20       1:28
4  2016-01-20 14:22:00 2016-01-20       1:50
5  2016-01-20 12:32:00 2016-01-20       4:52
6  2016-01-20 07:40:00 2016-01-20          0   
7  2016-01-19 23:23:00 2016-01-19       0:17
8  2016-01-19 23:06:00 2016-01-19       0:29
9  2016-01-19 22:37:00 2016-01-19       0:41
10 2016-01-19 21:56:00 2016-01-19       0:51
11 2016-01-19 21:05:00 2016-01-19       3:12
12 2016-01-19 17:53:00 2016-01-19       0:14
13 2016-01-19 17:39:00 2016-01-19       0:38
14 2016-01-19 17:01:00 2016-01-19       1:30
15 2016-01-19 15:31:00 2016-01-19          0
>df$Time\u格式的df$Date df
时间/格式化日期
1  2016-01-20 19:19:00 2016-01-20
2  2016-01-20 18:33:00 2016-01-20
3  2016-01-20 15:50:00 2016-01-20
4  2016-01-20 14:22:00 2016-01-20
5  2016-01-20 12:32:00 2016-01-20
6  2016-01-20 07:40:00 2016-01-20
7  2016-01-19 23:23:00 2016-01-19
8  2016-01-19 23:06:00 2016-01-19
9  2016-01-19 22:37:00 2016-01-19
10 2016-01-19 21:56:00 2016-01-19
11 2016-01-19 21:05:00 2016-01-19
12 2016-01-19 17:53:00 2016-01-19
13 2016-01-19 17:39:00 2016-01-19
14 2016-01-19 17:01:00 2016-01-19
15 2016-01-19 15:31:00 2016-01-19
>df$Hours_diff df[其中(diff(df$Date)!=0),“Hours_diff”]df$Hours_diff,粘贴(地板(df$Hours_diff/60),df$Hours_diff%%60,sep=“:”,0)
>df
时间\u格式日期小时\u差异
1  2016-01-20 19:19:00 2016-01-20       0:46
2  2016-01-20 18:33:00 2016-01-20       2:43
3  2016-01-20 15:50:00 2016-01-20       1:28
4  2016-01-20 14:22:00 2016-01-20       1:50
5  2016-01-20 12:32:00 2016-01-20       4:52
6  2016-01-20 07:40:00 2016-01-20          0   
7  2016-01-19 23:23:00 2016-01-19       0:17
8  2016-01-19 23:06:00 2016-01-19       0:29
9  2016-01-19 22:37:00 2016-01-19       0:41
10 2016-01-19 21:56:00 2016-01-19       0:51
11 2016-01-19 21:05:00 2016-01-19       3:12
12 2016-01-19 17:53:00 2016-01-19       0:14
13 2016-01-19 17:39:00 2016-01-19       0:38
14 2016-01-19 17:01:00 2016-01-19       1:30
15 2016-01-19 15:31:00 2016-01-19          0

我不确定,我知道你想要什么。是否要为每个日期显示相邻时间戳之间的所有时间差?或者每天只有一个数字?嗨,你的第一个假设是正确的,我编辑了这篇文章来展示一个硬编码的例子。最大的诀窍是在一天中的第一时间不存在时间差…我不确定,我明白你想要什么。是否要为每个日期显示相邻时间戳之间的所有时间差?或者每天只有一个数字?嗨,你的第一个假设是正确的,我编辑了这篇文章来展示一个硬编码的例子。最大的诀窍是处理一天中的第一个时间,那里不存在时间差…谢谢,我喜欢本例中的
tapply
集成!谢谢,我喜欢本例中的
tapply
集成!