mysql - 如何按行号提取 tbl_mysql 或 tbl_sqlite 数据框的子集?

标签 mysql sql r sqlite dplyr

据我了解 dplyr 包的 slice 函数的帮助页面,可以像这样选择 SQL tbl 或 SQLite tbl 的行:

filter(mtcars, row_number() == 1L)

但是当我尝试时出现错误:

dat1 <- data.frame(
  Name = c("Joe", "Bill", "Jim", "Kate"),
  Value = c(10.1, 9, 7.7, -3),
  Indic = c(0L, 1L, 2L, 2L),
  Status = c(TRUE, TRUE, FALSE, FALSE)
)
#### Create SQLite database ####
library(dplyr)
my_database <- src_sqlite("db_sqlite_file", create = TRUE) 
#### Put data in database ####
copy_to(my_database, dat1, temporary = FALSE)
#### Connect to database ####
my_db <- src_sqlite("db_sqlite_file", create = FALSE)
#### Querying the database ####
dd <- tbl(my_db, "dat1")
ddextract <- filter(dd, row_number() == 1L)

错误信息出现在这里:

> ddextract  
Source: sqlite 3.8.6 [db_sqlite_file]
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: no such function: ROW_NUMBER

MySQL同样的问题:

my_db_sql <- src_mysql("mysql_dplyr", password="mypassword") 
dd <- tbl(my_db_sql, "dat1")
ddextract <- filter(dd, row_number() == 1L)

错误:

> ddextract
Source: mysql 5.5.49-0ubuntu0.14.04.1 [root@localhost:/mysql_dplyr]
Error in .local(conn, statement, ...) : 
  could not run statement: FUNCTION mysql_dplyr.ROW_NUMBER does not exist

当然我可以用行号创建一个新列,但我想知道为什么 filter(mtcars, row_number() == 1L) 不起作用。

最佳答案

你可以试试这个:

ddextract <- dd %>% collect() %>% filter(row_number() == 1L)

关于mysql - 如何按行号提取 tbl_mysql 或 tbl_sqlite 数据框的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37511316/

相关文章:

sql - 需要查询以不同的方式显示数据

r - 在R中存储循环迭代的结果

r - 曲线下的阴影面积

mysql - 计算积分后获取用户的位置

mysql - sql group_concat 和子查询

mysql - 将数据插入到包含现有数据的表中,然后删除 session 期间未触及的数据

sql - 用于选择数字最后 6 位数字的存储过程

mysql - 简单的 MySql 选择

mysql - distinct or group?哪个在mysql中效率更高?

r - bnlearn 节点的错误尺寸