使用dplyr选择sqlite数据库的子集

时间:2015-11-11 19:51:05

标签: r sqlite dplyr

我试图使用dplyr来下载sqlite数据库中的一部分行。由于slice不能与tbl_sql个对象一起使用,因此我使用了窗口函数row_number。但是我收到以下错误:

Source: sqlite 3.8.6  
[/Library/Frameworks/R.framework/Versions/3.2/Resources/library/dplyr/db/nycflights13.sqlite]
Error in sqliteSendQuery(con, statement, bind.data) : 
error in statement: no such function: ROW_NUMBER

dplyr版本0.4.3.9000,RSQLite版本1.0.0。可重复的例子:

library(dplyr)
library(nycflights13)

flights_sqlite <- tbl(nycflights13_sqlite(), "flights")

filter(flights_sqlite, row_number(month) == 1L) %>% collect()

1 个答案:

答案 0 :(得分:2)

可能有一种更有效,更快捷的方式,但head似乎可以胜任。

  

提取前n行,例如前10个记录:

head(flights_sqlite, 10) %>% collect() 

输出:

   year month day dep_time dep_delay arr_time arr_delay carrier tailnum flight origin dest air_time distance hour minute
1  2013     1   1      517         2      830        11      UA  N14228   1545    EWR  IAH      227     1400    5     17
2  2013     1   1      533         4      850        20      UA  N24211   1714    LGA  IAH      227     1416    5     33
3  2013     1   1      542         2      923        33      AA  N619AA   1141    JFK  MIA      160     1089    5     42
4  2013     1   1      544        -1     1004       -18      B6  N804JB    725    JFK  BQN      183     1576    5     44
5  2013     1   1      554        -6      812       -25      DL  N668DN    461    LGA  ATL      116      762    5     54
6  2013     1   1      554        -4      740        12      UA  N39463   1696    EWR  ORD      150      719    5     54
7  2013     1   1      555        -5      913        19      B6  N516JB    507    EWR  FLL      158     1065    5     55
8  2013     1   1      557        -3      709       -14      EV  N829AS   5708    LGA  IAD       53      229    5     57
9  2013     1   1      557        -3      838        -8      B6  N593JB     79    JFK  MCO      140      944    5     57
10 2013     1   1      558        -2      753         8      AA  N3ALAA    301    LGA  ORD      138      733    5     58
  

百分比的第一行

head(flights_sqlite, nrow(flights_sqlite)*0.1) %>% collect() 
  

对任何特定行数进行分组。例如,行578和579:

head(flights_sqlite, nrow(flights_sqlite))[578:579, ] %>% collect()

输出:

    year month day dep_time dep_delay arr_time arr_delay carrier tailnum flight origin dest air_time distance hour minute
578 2013     1   1     1701        -9     2026        11      AA  N3FUAA    695    JFK  AUS      247     1521   17      1
579 2013     1   1     1701         1     1856        16      UA  N418UA    689    LGA  ORD      144      733   17      1