Я очень новичок в создании функций и альтернатив циклам, но я пытаюсь запустить набор функций dplyr на фрейме данных. Тем не менее, кадр данных должен быть разделен на передатчик и станцию. В настоящее время я использую вложенное значение для l oop, но, как я и ожидал, это занимает очень много времени и неэффективно. Вот структура моих данных.
> str(example)
> str(Det17)
'data.frame': 43423 obs. of 3 variables:
$ DateTime : POSIXct, format: "2017-07-31 02:57:42" "2017-07-31 13:10:27" "2017-08-09 09:52:12" "2017-07-31 02:59:30" ...
$ Transmitter: Factor w/ 58 levels "1657","1658",..: 38 38 46 38 38 38 38 29 38 38 ...
$ Station : Factor w/ 41 levels "A0","A1","A2",..: 35 35 35 35 35 35 35 35 35 35 ...
>
Вот код, который я пытаюсь использовать:
for( i in Det17$Station){
for( j in Det17$Transmitter){
Example <- Det17%>%
filter(Station == i & Transmitter == j)%>%
arrange(DateTime)%>%
mutate(difftime = difftime(lead(DateTime),DateTime, tz = 'EST', units = 'secs'))%>%
filter(difftime < 30)
if(length(Example$difftime) > 0) {
print("TRUE")
} else {
next
}
}
}
По сути, я хочу фильтровать свои данные по каждой комбинации станции и передатчика уровни. Я хочу упорядочить кадр данных по дате и времени, добавить новый столбец, который является разницей между двумя последовательными временами, снова отфильтровать по разностям менее 30 секунд, а затем вывести «TRUE», если длина новой переменной больше 0. В идеале я будет знать, какие комбинации привели к выводу «ИСТИНА», но я еще не получил там.
РЕДАКТИРОВАТЬ:
Вот группа функций, как функция, а не oop:
function(x){
arrange(DateTime)%>%
mutate(difftime = difftime(lead(DateTime),DateTime, tz = 'EST', units = 'secs'))%>%
filter(difftime < 30)
if(length(Example$difftime) > 0) {
print("TRUE")
} else {
next
}
}