У меня есть большой CSV данных о тренировках, извлеченных из файлов GPX, состоящих из 6 столбцов:
1. Нет (например, (от 1 до ~ 900 тысяч)
2. широта (например, 34.105329,
3. долгота (например, -118.299236),
4. высота (в метрах,
5. дата (например, 20.10.2017),
6. время (2:08) : 05:00)
Я хотел бы установить sh столбец, в котором указан номер тренировки, например, тренировка 1 охватывает строки с 1 по 2000, а тренировка 2 охватывает строки с 2001 по 5000. Мне удалось выполнить sh в Excel с оператором If, но не выяснили, как это сделать sh это в R.
В основном, если точка данных был записан в тот же день И в течение двух часов после предыдущей точки данных, обе точки принадлежали к одной и той же тренировке.Если точки данных были зарегистрированы в один и тот же день, но были разделены более чем на 2 часа, они принадлежат двум сент тренировочные тренировки. Ниже я вставил некоторые данные, которые включают первые несколько строк Workout 1 и первые несколько строк Workout 2 (достаточно, чтобы продемонстрировать, как работает формула Excel).
Код выхода:
dput(droplevels(mydata[1:10, ]))
Выход выхода:
structure(list(No = 1:10, Latitude = c(34.092483, 34.092534,
34.092573, 34.092624, 34.092652, 34.092684, 34.092712, 34.092742,
34.092774, 34.092808), Longitude = c(-118.300414, -118.300448,
-118.300434, -118.300431, -118.300428, -118.300425, -118.300423,
-118.300425, -118.300426, -118.300427), Altitude = c(104.2, 104.2,
104.3, 104.4, 104.4, 104.5, 104.5, 104.5, 104.6, 104.6), Date = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "10/20/2017", class = "factor"),
Time = structure(1:10, .Label = c("1:40:18", "1:43:06", "1:43:08",
"1:43:10", "1:43:11", "1:43:12", "1:43:13", "1:43:14", "1:43:15",
"1:43:16"), class = "factor")), row.names = c(NA, 10L), class = "data.frame")
Пример данных:
No Latitude Longitude Altitude Date Time Workout#
1 34.092483 -118.300414 104.2 10/20/2017 1:40:18 1
2 34.092534 -118.300448 104.2 10/20/2017 1:43:06 1
3 34.092573 -118.300434 104.3 10/20/2017 1:43:08 1
4 34.092624 -118.300431 104.4 10/20/2017 1:43:10 1
5 34.092652 -118.300428 104.4 10/20/2017 1:43:11 1
1332 34.092487 -118.300577 104.1 11/4/2017 1:23:24 2
1333 34.092513 -118.300565 104.2 11/4/2017 1:23:25 2
1334 34.09255 -118.30053 104.3 11/4/2017 1:23:26 2
1335 34.092592 -118.300495 104.4 11/4/2017 1:23:28 2
1336 34.092619 -118.300481 104.4 11/4/2017 1:23:29 2
1337 34.092668 -118.300467 104.5 11/4/2017 1:23:31 2
Редактировать: Спасибо @AllanCameron и @GregorThomas. Я запустил ваш код и суммировал его, используя приведенный ниже код, который дает желаемые результаты.
cumsum <- cumsum(c(1, as.numeric(diff(workout_times) > 7200)))
# Add 'cumsum' to 'mydata' data frame
mydata$cumsum <- cumsum
sqldf("select distinct(cumsum) from mydata")