在 R 中创建累积和列 with_order
Creating a cumulative sum column with_order in R
我正在研究 SQL 在 R 中使用 queryparser 和 tidyquery 的教程。这一直很顺利,直到我被要求这样做:
SELECT ... SUM(new_vaccinations) OVER (PARTITION BY location) as vaccinations_to_date
Tidyquery 报告它不支持 OVER
函数,所以我试图用 dplyr 复制 OVER (PARTITION BY...)
函数。
这让我在 dplyr 中找到 with_order(order_by =...
。现在我正在努力让 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 =...)
?
如果不清楚,我的目标是创建一个新列,为每个单独的位置保留 运行 疫苗接种总数。
SQL 的 PARTITION BY
方面通常可以使用 group_by
在 dplyr 中完成。
并且 SQL 的 ORDER BY
方面通常可以使用 arrange
在 dplyr 中完成。
考虑这个 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
我正在研究 SQL 在 R 中使用 queryparser 和 tidyquery 的教程。这一直很顺利,直到我被要求这样做:
SELECT ... SUM(new_vaccinations) OVER (PARTITION BY location) as vaccinations_to_date
Tidyquery 报告它不支持 OVER
函数,所以我试图用 dplyr 复制 OVER (PARTITION BY...)
函数。
这让我在 dplyr 中找到 with_order(order_by =...
。现在我正在努力让 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 =...)
?
如果不清楚,我的目标是创建一个新列,为每个单独的位置保留 运行 疫苗接种总数。
SQL 的 PARTITION BY
方面通常可以使用 group_by
在 dplyr 中完成。
并且 SQL 的 ORDER BY
方面通常可以使用 arrange
在 dplyr 中完成。
考虑这个 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