sqldf有一个获得'X‘行的限制选项。我们也可以使用sqldf做'x%‘示例吗?
例如:
> 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有办法解决这个问题吗?
曼尼什
发布于 2015-09-03 12:20:42
这基本上是一个SQL问题。由于sqldf默认使用SQLite (这不是绝对正确的,请参阅?sqldf中的drv文档以获得更多详细信息),问题归结为“如何在SQLite中随机选择行?”。在这是如此的帖子中可以找到一个简单的答案
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;使用问题中的示例:
> 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解决方案可能存在。
percentage <- 0.02
mylimit <- round(nrow(iris) * percentage, 0)
sqldf(sprintf("select * from iris order by RANDOM() limit %d", mylimit))发布于 2015-09-03 12:36:44
不太优雅(SQL不是我的优点),但它有效。
library(sqldf)
totalrows <- sqldf("SELECT COUNT(*) AS NumberOfOrders FROM iris") 所以..。
10*totalrows[[1]]/100拿上“号码”,放在这里:
sqldf("SELECT * FROM iris LIMIT number")无论如何,这是一个sql而不是R的问题。
发布于 2016-09-09 21:52:55
使用sqldf主页中的6e,我们可以使用这样的SQL从iris中随机获得10%的记录:
library(sqldf)
sqldf("select * from iris order by random(*) limit 0.10 * (select count(*) from iris)")若要按分数进行参数化,请尝试如下:
frac <- 0.10
fn$sqldf("select * from iris order by random(*) limit $frac * (select count(*) from iris)")https://stackoverflow.com/questions/32375268
复制相似问题