使用 SQLDF 的示例行
Sample Rows with SQLDF
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
是否有一些解决方法?
马尼什
这基本上是一个 SQL 问题。由于 sqldf
默认使用 SQLite(这不是绝对正确的,有关详细信息,请参阅 ?sqldf
中 drv
的文档),问题归结为 "How to select rows in random order in SQLite?".可以在 this SO post:
中找到一个简单的答案
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
编辑: 如果给出 percentage 而不是 number 行,则以下可以用作 R 解决方案。纯 SQLite 解决方案可能存在。
percentage <- 0.02
mylimit <- round(nrow(iris) * percentage, 0)
sqldf(sprintf("select * from iris order by RANDOM() limit %d", mylimit))
不是很优雅(SQL 不是我的强项)但它有效。
library(sqldf)
totalrows <- sqldf("SELECT COUNT(*) AS NumberOfOrders FROM iris")
所以....
10*totalrows[[1]]/100
获取 "number" 并放在这里:
sqldf("SELECT * FROM iris LIMIT number")
不管怎么说,都是sql而不是R
的问题
使用 sqldf home page 中的 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)")
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
是否有一些解决方法?
马尼什
这基本上是一个 SQL 问题。由于 sqldf
默认使用 SQLite(这不是绝对正确的,有关详细信息,请参阅 ?sqldf
中 drv
的文档),问题归结为 "How to select rows in random order in SQLite?".可以在 this SO post:
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
编辑: 如果给出 percentage 而不是 number 行,则以下可以用作 R 解决方案。纯 SQLite 解决方案可能存在。
percentage <- 0.02
mylimit <- round(nrow(iris) * percentage, 0)
sqldf(sprintf("select * from iris order by RANDOM() limit %d", mylimit))
不是很优雅(SQL 不是我的强项)但它有效。
library(sqldf)
totalrows <- sqldf("SELECT COUNT(*) AS NumberOfOrders FROM iris")
所以....
10*totalrows[[1]]/100
获取 "number" 并放在这里:
sqldf("SELECT * FROM iris LIMIT number")
不管怎么说,都是sql而不是R
的问题使用 sqldf home page 中的 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)")