首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQLDF的示例行

使用SQLDF的示例行
EN

Stack Overflow用户
提问于 2015-09-03 12:10:55
回答 3查看 2.9K关注 0票数 3

sqldf有一个获得'X‘行的限制选项。我们也可以使用sqldf做'x%‘示例吗?

例如:

代码语言:javascript
复制
> sqldf("select * from iris limit 3")

Loading required package: tcltk
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa

> sqldf("select * from iris sample 0.01")
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: near ".1": syntax error

有办法解决这个问题吗?

曼尼什

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-03 12:20:42

这基本上是一个SQL问题。由于sqldf默认使用SQLite (这不是绝对正确的,请参阅?sqldf中的drv文档以获得更多详细信息),问题归结为“如何在SQLite中随机选择行?”。在这是如此的帖子中可以找到一个简单的答案

代码语言:javascript
复制
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;

使用问题中的示例:

代码语言:javascript
复制
> sqldf("select * from iris order by RANDOM() limit 3")
  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1          6.3         3.3          4.7         1.6 versicolor
2          6.0         2.7          5.1         1.6 versicolor
3          5.0         2.0          3.5         1.0 versicolor

编辑:--如果给出的是百分比而不是行数,则可以使用以下方法作为R解决方案。纯SQLite解决方案可能存在。

代码语言:javascript
复制
percentage <- 0.02
mylimit <- round(nrow(iris) * percentage, 0)
sqldf(sprintf("select * from iris order by RANDOM() limit %d", mylimit))
票数 6
EN

Stack Overflow用户

发布于 2015-09-03 12:36:44

不太优雅(SQL不是我的优点),但它有效。

代码语言:javascript
复制
library(sqldf)
totalrows <- sqldf("SELECT COUNT(*) AS NumberOfOrders FROM iris") 

所以..。

代码语言:javascript
复制
10*totalrows[[1]]/100

拿上“号码”,放在这里:

代码语言:javascript
复制
sqldf("SELECT * FROM iris LIMIT number")

无论如何,这是一个sql而不是R的问题。

票数 1
EN

Stack Overflow用户

发布于 2016-09-09 21:52:55

使用sqldf主页中的6e,我们可以使用这样的SQL从iris中随机获得10%的记录:

代码语言:javascript
复制
library(sqldf)

sqldf("select * from iris order by random(*) limit 0.10 * (select count(*) from iris)")

若要按分数进行参数化,请尝试如下:

代码语言:javascript
复制
frac <- 0.10
fn$sqldf("select * from iris order by random(*) limit $frac * (select count(*) from iris)")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32375268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档