Как настроить два динамических условия в SUMIFS, как проблема в R? - PullRequest
0 голосов
/ 09 мая 2019

Я уже старался изо всех сил, но все еще в значительной степени новичок в 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.longitude335511.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)

Я знаю, что я также должен был бы добавить что-то для долготы в коде выше

У кого-нибудь есть идеи, как это исправить?Любая помощь или советы высоко ценится и спасибо заранее!:)

1 Ответ

0 голосов
/ 09 мая 2019

Посмотрите, поможет ли приведенный ниже код.

TOTALLISTINGS$reviews1000 <- sapply(1:nrow(TOTALLISTINGS), function(r) {
  currentLATI <- TOTALLISTINGS$calc.latitude[r]
  currentLONG <- TOTALLISTINGS$calc.longitude[r]
  sum(TOTALLISTINGS$reviews_last30days[between(TOTALLISTINGS$calc.latitude,currentLATI - 500, currentLATI + 500) & between(TOTALLISTINGS$calc.longitude,currentLONG - 500, currentLONG + 500)])
})
...