使用SQLDF的示例行

myl*_*nid 3 r sample 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
Run Code Online (Sandbox Code Playgroud)

这有什么解决方法吗?

马尼什

CL.*_*CL. 6

这基本上是一个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)