如何在 SUMIFS 中设置两个动态条件,如 R 中的问题?
How to setup two dynamic conditions in SUMIFS like problem in R?
我已经尽力了,但对于 R 来说我仍然是个新手。
基于大约 500mb 的 输入 数据,目前看起来像这样:
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。
示例:
- ROW 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
希望我脑子里计算正确,但你明白了..
直到现在,我的总和条件是动态的,而且 "newly assigned" 因为必须为每条记录调整纬度和经度条件,所以我特别挣扎。
我当前的代码看起来像这样,但它显然不能那样工作:
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)
我知道我还必须在上面的代码中为经度添加一些内容
有人知道如何解决这个问题吗?
非常感谢任何帮助或提示并提前致谢! :)
看看下面的代码是否有帮助。
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)])
})
我已经尽力了,但对于 R 来说我仍然是个新手。
基于大约 500mb 的 输入 数据,目前看起来像这样:
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。
示例:
- ROW 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
希望我脑子里计算正确,但你明白了..
直到现在,我的总和条件是动态的,而且 "newly assigned" 因为必须为每条记录调整纬度和经度条件,所以我特别挣扎。
我当前的代码看起来像这样,但它显然不能那样工作:
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)
我知道我还必须在上面的代码中为经度添加一些内容
有人知道如何解决这个问题吗? 非常感谢任何帮助或提示并提前致谢! :)
看看下面的代码是否有帮助。
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)])
})