Я работаю с данными GPS и пытаюсь выяснить, как усреднить 11-15-е исправления для широты и долготы. Я видел решения в похожих вопросах, как усреднять каждые n строк. Проблема в том, что иногда спутники взрываются, а исправления останавливаются на 13 или 14. Таким образом, в этих случаях я хочу только усреднять 3 или 4 значения вместо 5. Поэтому я ищу средние значения для широты и долготы, начиная с где число в ряду равно 11, пока число в ряду не упадет снова (или пока оно увеличивается? Мне нужно, чтобы он включал последний набор, который снова не будет возвращаться к низкому числу). Я начал с удаления всех строк, где число в серии НЕ в моих желаемых диапазонах 11-15. Так, для примера фиктивного набора данных, это оставляет меня:В R, среднее значение строки до тех пор, пока не наступит определенное условие, затем перезапустите, с выходом в новом столбце
Date Time Long Lat NoInSeries
12 17/11/2014 22:09:17 115.9508 -31.82850 11
13 17/11/2014 22:09:18 115.9508 -31.82846 12
14 17/11/2014 22:09:19 115.9513 -31.82864 13
15 17/11/2014 22:09:21 115.9511 -31.82863 14
26 18/11/2014 00:07:14 115.9509 -31.82829 11
27 18/11/2014 00:07:15 115.9509 -31.82829 12
28 18/11/2014 00:07:16 115.9509 -31.82830 13
29 18/11/2014 00:07:17 115.9509 -31.82830 14
30 18/11/2014 00:07:18 115.9509 -31.82831 15
56 18/11/2014 10:00:24 115.9513 -31.82670 11
57 18/11/2014 10:00:25 115.9514 -31.82670 12
58 18/11/2014 10:00:26 115.9514 -31.82669 13
59 18/11/2014 10:00:27 115.9514 -31.82668 14
60 18/11/2014 10:00:28 115.9514 -31.82668 15
Мой желаемый результат будет что-то вроде этого, с первым один в среднем 4 (11-14), а следующие два в среднем 5 (11- 15):
Date Time Long Lat NoInSeries AvgLong Avg Lat
12 17/11/2014 22:09:17 115.9508 -31.82850 11 115.9510 -31.82856
13 17/11/2014 22:09:18 115.9508 -31.82846 12 NA NA
14 17/11/2014 22:09:19 115.9513 -31.82864 13 NA NA
15 17/11/2014 22:09:21 115.9511 -31.82863 14 NA NA
26 18/11/2014 00:07:14 115.9509 -31.82829 11 115.9509 -31.82830
27 18/11/2014 00:07:15 115.9509 -31.82829 12 NA NA
28 18/11/2014 00:07:16 115.9509 -31.82830 13 NA NA
29 18/11/2014 00:07:17 115.9509 -31.82830 14 NA NA
30 18/11/2014 00:07:18 115.9509 -31.82831 15 NA NA
56 18/11/2014 10:00:24 115.9513 -31.82670 11 115.9514 -31.82669
57 18/11/2014 10:00:25 115.9514 -31.82670 12 NA NA
58 18/11/2014 10:00:26 115.9514 -31.82669 13 NA NA
59 18/11/2014 10:00:27 115.9514 -31.82668 14 NA NA
60 18/11/2014 10:00:28 115.9514 -31.82668 15 NA NA
Я бы тогда пройти и удалить все строки, в которых AvgLong == NA, так что мой окончательный вывод будет только иметь все строки, где число в серии = 11 с средними.
Я действительно не знаю, с чего начать с кода для этого ... примеры, которые я нашел, все обсуждали, усредняя точное количество строк, а не переменное число.
Например:
c(tapply(x, (row(x)-1)%/%5, mean))
Или:
idx <- ceiling(seq_len(nrow(dd))/5)
# do colMeans on all columns except last one.
res <- lapply(split(dd[-(ncol(dd))], idx), colMeans, na.rm = TRUE)
# assign first value of "datetime" in each 5-er group as names to list
names(res) <- dd$datetime[seq(1, nrow(df), by=5)]
# bind them to give a matrix
res <- do.call(rbind, res)
Кроме того, ответы на которые я видел, как правило, тогда выходные средние значения как новый кадр данных ... В конце концов, я тоже хочу иметь это усреднение при условии: если расписание - это «Multifix», я хочу, чтобы средний показатель был до 11, но до 15, тогда как если график «Непрерывный», я хочу усреднить с 181 до тех пор, пока все не пройдут. .). Что-то вроде этого:
if(import.list$Schedule=='Multifix'){
...code to average Long and Lat for Number in Series from 11 up to however high it goes (up to 15)...
} else {
...code to average Long and Lat for Number in Series from 241 up to however high it goes...
}
Или, возможно, у меня есть, если другое заявление, чтобы определить переменную, а затем использовать эту переменную в функции, чтобы сделать усреднение?
... но я полагаю, что это условие может усложнить ситуацию, если на выходе создается новый dataframe, поэтому я стремился просто добавлять значения к новым столбцам «AvgLong» и «AvgLat». Спасибо за любую помощь!
Из любопытства вы могли бы использовать функцию «ave» при подмножестве кадра данных для неравномерных сегментов. Например, первые 5 строк, затем 10 строк, затем 6 строк ... и так далее. Мое решение может выполнять такую задачу. – Sathish
Если INDEX является нерегулярным размером, то функция применяется к соответствующим элементам в первом аргументе. Нет равных размеров. –