在 SQL 和 R 中选择随机数据

Selecting random data in SQL and R

我有这个SQL-服务器代码:ABS(checksum(newid())%14

生成 0 到 13 之间均匀分布的随机数。

更具体地说,我的 SQL table 中有一列包含这些随机数。在 R 中做一些分析,我现在已经使用 Microsoft-R / XDF 文件将 SQL table 导入到 R 中。我想基于此列在 80%-20% 的数据上创建一个测试和训练集。你知道我会怎么做吗?

谢谢。

更新: 由于它是一个 .XDF 文件,我会使用 rxSplitXdf 函数。 这是一篇深入讨论它并显示示例的文章:

https://docs.microsoft.com/en-us/r-server/r-reference/revoscaler/rxsplitxdf

类似于:

rxSplitXdf(inFile, outFileSuffixes = c("train","test"),  
         numOutFiles = 2, splitBy = "rows", 
         rowSelection = (random number >=7))

您可以使用两个 rxDataStep 手动执行此操作:

train <- rxDataStep(infile, "train.xdf", rowSelection=random_number < 11)
test <- rxDataStep(infile, "test.xdf", rowSelection=random_number >= 11)

其中截止值为 0.8*13。如果您将使用 Xdf 文件进行大量数据处理,请考虑安装 dplyrXdf。它允许您使用 dplyr 动词和管道,将 Xdfs 视为数据帧。你可以用

得到它
devtools::install_github("revolutionAnalytics/dplyrXdf")

上面的代码会变成

train <- filter(infile, random_number < 11, .outFile="train.xdf")
test <- filter(infile, random_number >= 11, .outFile="test.xdf")

或者,您可以根据输入创建一个因子变量,然后调用 rxSplit

rxDataStep(infile, infile,
    transforms=list(splitVar=factor(random_number < 11, levels=c("train", "test")))
lst <- rxSplit(infile, splitByFactor="splitVar")