2015-11-19 46 views
0

我期待的,其顺序是由两列而不是一个确定的行数过滤dplyr ROW_NUMBER:与多个订单列

pg <- src_postgres() 
dat <- tbl(pg, 'table') 

rows <- dat %>% 
    group_by(dimension) %>% 
    filter(row_number(date1, date2) == 1) 

这会产生错误:

Error in row_number(date1, date2) : unused argument (date2)

我可以通过修改问题来完成上述操作,如下所示,但这看起来像是矫枉过正,特别是如果我需要以3列以上的顺序排列。 row_number是否有一些我缺少的功能可以减少冗余?

rows <- dat %>% 
    group_by(dimension, date1) %>% 
    filter(row_number(date2) == 1) %>% 
    group_by(dimension) %>% 
    filter(row_number(date1) == 1) 

回答

2

如何:

dat %>% 
    arrange(dimension, date1, date2) %>% 
    group_by(dimension) %>% 
    filter(1:n() == 1) 
+0

因为我在做数据库的工作片功能出了问题。 我将不得不使用row_number函数与ORDER BY子句中的date1和date2。 – mtread

+0

请参阅编辑以使用过滤器代替 – bramtayl

+0

这仍然不起作用。 请记住,我没有收集这些数据。我打算使用dplyr来操作数据in-db。当我收集()时,你的解决方案有点工作,但我需要一种方法让dplyr正确地为PostgreSQL构造OVER子句。 – mtread