2015-11-04 526 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. –