2015-11-04 191 views
1

我想通过使用R语言将我的数据(时间)转换为相应的时间间隔。在如下图所示我数据框:R中的循环(时间间隔)

Date,Time,Lots,Status 
"10-28-15","00:04:13","13-09","1" 
"10-28-15","00:04:16","13-10","1" 
"10-28-15","00:04:30","13-11","1" 
"10-28-15","00:04:44","13-12","1" 
"10-28-15","00:04:48","13-13","1" 
"10-28-15","00:04:50","13-14","1" 
"10-28-15","00:04:57","13-15","0" 
"10-28-15","00:04:57","13-16","0" 
"10-28-15","00:05:04","13-17","0" 
"10-28-15","00:05:04","13-18","0" 

,我想有这样的时间间隔的输出(带有4个间隔每小时/每15分钟)

Date,Time,Lots,Status,*interval* 
"10-28-15","00:04:13","13-09","1",*"00:04:00"* 
"10-28-15","00:04:16","13-10","1","00"04"15" 
"10-28-15","00:04:30","13-11","1","00:04:30" 
"10-28-15","00:04:44","13-12","1","00:04:45" 
"10-28-15","00:04:48","13-13","1","00:04:45" 
"10-28-15","00:04:50","13-14","1","00:04:45" 
"10-28-15","00:04:57","13-15","0","00:04:45" 
"10-28-15","00:04:57","13-16","0","00:04:45" 
"10-28-15","00:05:04","13-17","0","00:05:00" 
"10-28-15","00:05:04","13-18","0","00:05:00" 

如果我使用for循环,如

for(i=0,i<=60,i+15) 
} for(if(i>i && i<=i+15) 
} 

我该如何在R语言中做到这一点?感谢您的帮助球员,新手在编程...

sample$int<- strptime(paste(sample$V1,sample$V2),format="%m-%d-%y %H:%M:%S") 
min_V2<-trunc(min(strptime("28-10-2015 00:00:20", "%d-%m-%y %H:%M:%S")),"min") 
max_V2<-trunc(max(strptime("28-10-2015 23:59:59", "%d-%m-%y %H:%M:%S")),"min") + 900 
out <- cut(sample$int, breaks = seq(min_V2, max_V2, by = "15 min")) 
+0

'cut'也可以与日期/时间对象一起使用。你的数据有什么特点? – A5C1D2H2I1M1N2O1R2T1

+0

hi @AnandaMahto。感谢回复。我已经看到切功能,但我不知道如何使用它。 –

回答

2

我假设你的意思,不分钟在你的你想要的描述。

这里是我们如何能够从你的输入数据到15秒间隔一个基本的例子:

首先,将您的“日期”和“时间”列,以形成实际的日期/时间对象:

x <- strptime(paste(mydf$Date, mydf$Time), 
       format = "%m-%d-%y %H:%M:%S") 

其次,找出值范围内的最小值和最大值。由于看起来这些值来自同一天,但可变分钟数,我选择了“分”在截断。对于max的价值,我增加了60秒,以凑到下一分钟。

min_x <- trunc(min(x), "min") 
max_x <- trunc(max(x), "min") + 60 

第三,我们可以使用seq通过每隔15秒产生断点的序列。我们可以在cut使用这些断点:

out <- cut(x, breaks = seq(min_x, max_x, by = "15 sec")) 
out 
# [1] 2015-10-28 00:04:00 2015-10-28 00:04:15 2015-10-28 00:04:30 
# [4] 2015-10-28 00:04:30 2015-10-28 00:04:45 2015-10-28 00:04:45 
# [7] 2015-10-28 00:04:45 2015-10-28 00:04:45 2015-10-28 00:05:00 
# [10] 2015-10-28 00:05:00 
# 8 Levels: 2015-10-28 00:04:00 ... 2015-10-28 00:05:45 

第四,如果你只对时间间隔有兴趣,你可以重新格式化的cut输出为日期/时间对象,并使用format只提取小时/分钟/秒部分。

format(as.POSIXct(out), "%H:%M:%S") 
# [1] "00:04:00" "00:04:15" "00:04:30" "00:04:30" "00:04:45" "00:04:45" 
# [7] "00:04:45" "00:04:45" "00:05:00" "00:05:00" 
+0

谢谢@Ananda Mahto。它看起来像最小和最大产生的错误,因为它的输出是NA –

+0

@SiewmeiLoh,我解释了如何在我的答案中使用'trunc'。您需要根据实际数据进行调整。 – A5C1D2H2I1M1N2O1R2T1

+0

对不起,我还是不明白。我是否需要将“min”参数更改为函数调用?如果你能告诉我一个例子...说,我的最小值是0. –