2015-11-19 56 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