0

我想解决postgresSQL使用R语言编写的窗口函数。

据我所知, R必须aggregate()计算分组数据。是否有任何库支持窗口功能?

4

2 回答 2

1

首先通过调用创建分区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
于 2021-08-16T06:00:37.190 回答
0

如果您熟悉 SQL 语法,则可以使用aggregateand 。mergePostgreSQL 手册中的一个例子为例,我们将使用

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为更精细的构造提供了什么。

于 2012-12-10T10:31:59.117 回答