Я уже старался изо всех сил, но все еще в значительной степени новичок в R.
На основе примерно 500 МБ входных данных , которые в настоящее время выглядят так:
TOTALLISTINGS
listing_id calc.latitude calc.longitude reviews_last30days
1 2818 5829821 335511.0 1
2 20168 5829746 335265.2 3
3 25428 5830640 331534.6 0
4 27886 5832156 332003.1 3
5 28658 5830888 329727.2 3
6 28871 5829980 332071.3 7
Мне нужно вычислить условную сумму reviews_last30days
- условия, представляющие собой конкретный и изменяющийся диапазон области для каждой соответствующей записи, т. Е. R должен суммировать только те обзоры, для которых calc.latitude
и calc.longitude
не отклоняются больше, чем+/- 500 от значений долготы и широты в каждой строке.
ПРИМЕР:
- В строке 1 есть
calc.latitude
5829821 и calc.longitude
335511.0, поэтому R должен принимать сумму всех reviews_last30days
, для которых применяются следующие диапазоны: calc.latitude
5829321 до 5830321 (значение широты строки 1 +/- 500) calc.longitude
335011.0 до 336011.0 (значение строки 1долгота +/- 500)
Таким образом, мой предполагаемый вывод будет выглядеть примерно так в столбце 5:
TOTALLISTINGS
listing_id calc.latitude calc.longitude reviews_last30days reviewsper1000
1 2818 5829821 335511.0 1 4
2 20168 5829746 335265.2 3 4
3 25428 5830640 331534.6 0 10
4 27886 5832156 332003.1 3 3
5 28658 5830888 331727.2 3 10
6 28871 5829980 332071.3 7 10
Надеюсь, я рассчитал правильнов моей голове, но вы поняли ..
До сих пор я особеннобороться с тем фактом, что мои условия суммирования являются динамическими и «вновь назначенными», поскольку условия широты и долготы необходимо корректировать для каждой записи.
Мой текущий код выглядит следующим образом, но, очевидно, он не работает таким образом:
review1000 <- function(TOTALLISTINGS = NULL){
# tibble to return
to_return <- TOTALLISTINGS %>%
group_by(listing_id) %>%
summarise(
reviews1000 = sum(reviews_last30days[(calc.latitude>=(calc.latitude-500) | calc.latitude<=(calc.latitude+500))]))
return(to_return)
}
REVIEWPERAREA <- review1000(TOTALLISTINGS)
Я знаю, что я также должен был бы добавить что-то для долготы в коде выше
У кого-нибудь есть идеи, как это исправить?Любая помощь или советы высоко ценится и спасибо заранее!:)