У меня есть огромный набор координат с соответствующими Z-значениями.Некоторые из пар координат повторяются несколько раз с разными значениями Z.Я хочу получить среднее значение всех Z-значений для каждой уникальной пары координат.
Я написал небольшую строку кода, которая отлично работает на небольшом фрейме данных.Проблема состоит в том, что мой фактический фрейм данных содержит более 2 миллионов строк, а вычисление занимает более 10 часов.Мне было интересно, можно ли было бы сделать его более эффективным и сократить время вычислений.
Вот как выглядит мой df:
> df
x y Z xy
1 -54.60417 4.845833 0.3272980 -54.6041666666667/4.84583333333333
2 -54.59583 4.845833 0.4401644 -54.5958333333333/4.84583333333333
3 -54.58750 4.845833 0.5788663 -54.5875/4.84583333333333
4 -54.57917 4.845833 0.6611844 -54.5791666666667/4.84583333333333
5 -54.57083 4.845833 0.7830828 -54.5708333333333/4.84583333333333
6 -54.56250 4.845833 0.8340629 -54.5625/4.84583333333333
7 -54.55417 4.845833 0.8373666 -54.5541666666667/4.84583333333333
8 -54.54583 4.845833 0.8290986 -54.5458333333333/4.84583333333333
9 -54.57917 4.845833 0.9535526 -54.5791666666667/4.84583333333333
10 -54.59583 4.837500 0.0000000 -54.5958333333333/4.8375
11 -54.58750 4.845833 0.8582580 -54.5875/4.84583333333333
12 -54.58750 4.845833 0.3857006 -54.5875/4.84583333333333
Вы можете видеть, что некоторые координаты xyодинаковы (например, строки 3,11,12 или 4 и 9), и я хочу, чтобы средние значения Z всех этих идентичных координат.Итак, вот мой сценарий:
mean<-vector(mode = "numeric",length = length(df$x))
for (i in 1:length(df$x)){
mean(df$Z[which(df$xy==df$xy[i])])->mean[i]
}
mean->df$mean
df<-df[,-(3:4)]
df<-unique(df)
И я получаю что-то вроде этого:
> df
x y mean
1 -54.60417 4.845833 0.3272980
2 -54.59583 4.845833 0.4401644
3 -54.58750 4.845833 0.6076083
4 -54.57917 4.845833 0.8073685
5 -54.57083 4.845833 0.7830828
6 -54.56250 4.845833 0.8340629
7 -54.55417 4.845833 0.8373666
8 -54.54583 4.845833 0.8290986
10 -54.59583 4.837500 0.0000000
Это работает, но, безусловно, есть способ ускорить этот процесс (возможно, безцикл for) для df с гораздо большим числом строк?