2015-11-04 3 views
1

Я хотел бы преобразовать свои данные (время) в соответствующий временной интервал, используя язык R. Мой dataframe будет, как показано ниже:Для циклов в 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(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' также может использоваться с объектами даты и времени. Что такое 'str' ваших данных? – A5C1D2H2I1M1N2O1R2T1

+0

привет @AnandaMahto. Спасибо за ответ. Я видел функцию разреза, но я не уверен, как ее использовать. –

ответ

2

Я предполагаю, что вы имели в виду секунд, а не минут в описании того, что вы хотели.

Вот простой пример того, как мы можем перейти от входных данных до 15-секундными интервалами:

Во-первых, преобразовать «Дата» и столбцы «Time» для формирования реального объекта дата/время:

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

Во-вторых, узнайте, каковы минимальные и максимальные значения в вашем диапазоне значений. Поскольку кажется, что эти значения относятся к одному и тому же дню, но с переменными минутами, я выбрал «min» для усечения. Для значения 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

спасибо @ Ананда Махто. это похоже на ошибки генерации min и max, так как его вывод равен NA –

+0

@SiewmeiLoh, я объяснил, как вы можете использовать 'trunc' в моем ответе. Вам нужно будет настроить в соответствии с вашими фактическими данными. – A5C1D2H2I1M1N2O1R2T1

+0

Извините, я до сих пор не понимаю. мне нужно изменить аргумент «min» для вызова функции? appreaciate, если вы могли бы показать мне пример ... скажем, мой минимум равен 0. –

Смежные вопросы