我想解决postgresSQL
使用R
语言编写的窗口函数。
据我所知, R
必须aggregate()
计算分组数据。是否有任何库支持窗口功能?
首先通过调用创建分区group_by
。这样,以下mutate
调用将明智地进行作业分区。然后取消组合以释放表格。我在一张假工资表上试了一下,它似乎奏效了。
hr_muatated <- hr_sub %>%
group_by(Department) %>%
mutate(
avg_dep_rate = mean(DailyRate),
medi_dep_rate = median(DailyRate)) %>%
ungroup()
它给了我这个:
> as.data.table(hr_muatated)
EmployeeNumber Department DailyRate avg_dep_rate medi_dep_rate
1: 1 Sales 1102 800.2758 770.5
2: 2 Research & Development 279 806.8512 810.0
3: 4 Research & Development 1373 806.8512 810.0
4: 5 Research & Development 1392 806.8512 810.0
5: 7 Research & Development 591 806.8512 810.0
---
1466: 2061 Research & Development 884 806.8512 810.0
1467: 2062 Research & Development 613 806.8512 810.0
1468: 2064 Research & Development 155 806.8512 810.0
1469: 2065 Sales 1023 800.2758 770.5
1470: 2068 Research & Development 628 806.8512 810.0
如果您熟悉 SQL 语法,则可以使用aggregate
and 。merge
以PostgreSQL 手册中的一个例子为例,我们将使用
empsalary <- data.frame(depname=rep(c("develop", "personnel", "sales"), c(5, 2, 3)),
empno=c(11, 7, 9, 8, 10, 5, 2, 3, 1, 4),
salary=c(5200, 4200, 4500, 6000, 5200, 3500, 3900, 4800, 5000, 4800))
merge(empsalary, aggregate(salary ~ depname, empsalary, mean), by="depname")
重现第一个示例(按 计算平均工资depname
)。
depname empno salary.x salary.y
1 develop 11 5200 5020.000
2 develop 7 4200 5020.000
3 develop 9 4500 5020.000
4 develop 8 6000 5020.000
5 develop 10 5200 5020.000
6 personnel 5 3500 3700.000
7 personnel 2 3900 3700.000
8 sales 3 4800 4866.667
9 sales 1 5000 4866.667
10 sales 4 4800 4866.667
您可能想看看plyr为更精细的构造提供了什么。