1

我正在使用 R 中的 queryparser 和 tidyquery 与 SQL 教程一起工作。这一直进展顺利,直到我被要求这样做:

SELECT ... SUM(new_vaccinations) OVER (PARTITION BY location) as vaccinations_to_date

Tidyquery 报告它不支持OVER函数,所以我正在尝试OVER (PARTITION BY...)使用 dplyr 复制该函数。

这导致我进入with_order(order_by =...dplyr。现在我正在努力fun =让我创建一个累积总和列。

library(tidyverse)
library(queryparser)
library(tidyquery)

mydf <- data.frame(date = as.Date(c("2021-06-01", '2021-06-02','2021-06-03','2021-06-04',
                                  '2021-6-01','2021-6-02','2021-6-03','2021-6-04',
                                  '2021-6-01','2021-6-02','2021-6-03','2021-6-04')),
                   location = c('United States','United States','United States','United States',
                                'Canada','Canada','Canada','Canada','Mexico','Mexico','Mexico','Mexico'),
                   new_vaccinations = c(100,98,32,50,99,34,97,53,35,101,97,56))

test <- mydf %>% 
  mutate (total_vax = with_order(order_by = location, fun = cumsum(new_vaccinations), x = desc(location)))

这给了我错误

could not find function "fun"

当谈到如何重建时,我是否看错了兔子洞OVER(PARTITION BY...)?如果是这样,什么是更好的选择?还是我错过了如何正确使用with_order(order_by =...)

如果不清楚,我的目标是创建一个新列,以保持每个单独位置的疫苗接种总数。

4

1 回答 1

0

PARTITION BYSQL 方面通常可以在 dplyr 中使用group_by.

并且ORDER BYSQL 方面通常可以在 dplyr 中使用arrange.

考虑这个 R 代码:

library(dplyr)
data(mtcars)

mtcars %>%
  select(mpg, cyl) %>%
  group_by(cyl) %>%
  arrange(mpg) %>%
  mutate(new = cumsum(mpg)) %>%
  arrange(cyl, mpg) %>%
  select(cyl, mpg, new)

相当于这个 SQL:

SELECT cyl
    ,mpg
    ,SUM(mpg) OVER (PARTITON BY cyl ORDER BY mpg) AS new
FROM mtcars
于 2021-11-11T01:46:48.473 回答