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
Run Code Online (Sandbox Code Playgroud)
这有什么解决方法吗?
马尼什
这基本上是一个SQL问题.由于sqldf默认情况下使用SQLite(这不完全正确,请参阅drvin 的文档以?sqldf获取更多详细信息),问题归结为"如何在SQLite中按随机顺序选择行?".在这篇SO帖子中可以找到一个简单的答案:
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
使用问题中的示例:
> 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
Run Code Online (Sandbox Code Playgroud)
编辑:如果给出百分比而不是行数,则可以将以下内容用作R解决方案.可能存在纯SQLite解决方案.
percentage <- 0.02
mylimit <- round(nrow(iris) * percentage, 0)
sqldf(sprintf("select * from iris order by RANDOM() limit %d", mylimit))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |