dplyr:使用DB后端进行随机选择

dplyr:使用DB后端进行随机选择,r,dplyr,R,Dplyr,dplyr的sample\u n()似乎只是针对数据帧而不是单个SQL后端实现的。是否有可能利用MySQLsorderbyrand()使用arrange?这将与dplyr的head相结合,并允许类似的功能 如果目标是在不替换的情况下对n行进行采样,则可以简单地sample行数并filter 因此,如果我们想从mtcars中随机选择5行,我们可以写: filter(mtcars, row_number() %in% sample(n(), 5)) 这仍然是一行,但它比普通的示例\n更受限制,因为

dplyr的
sample\u n()
似乎只是针对数据帧而不是单个SQL后端实现的。是否有可能利用MySQLs
orderbyrand()
使用
arrange
?这将与dplyr的
head
相结合,并允许类似的功能

如果目标是在不替换的情况下对
n
行进行采样,则可以简单地
sample
行数并
filter

因此,如果我们想从
mtcars
中随机选择5行,我们可以写:

filter(mtcars, row_number() %in% sample(n(), 5))
这仍然是一行,但它比普通的
示例\n
更受限制,因为您不能用替换来完成它(您不能通过筛选多次选择一行)。从好的方面来看,
过滤器
行号
n
应适用于所有源

请注意,如果表格被分组,则将从每组中抽取5行。如果你想要分数(比如说每组50%),你可以写:

mtcars %>% 
  group_by(cyl) %>% 
  filter(row_number() %in% sample(n(), round(0.5 * n())))
如果要进行加权采样,可以直接向
sample
中的
prob
参数提供变量:

filter(mtcars, row_number() %in% sample(n(), 5, prob = disp))

这将再次对5行进行采样,但更可能选择
disp
较高的行。

这是功能请求吗?因为那时你应该在github上,而不是在这里。@Axeman到目前为止,这只是一个问题,github只是为了解决问题。如果这是一个不受支持的特性,我将在Github上发出相应的特性请求。不过,您可能可以通过
runif
生成一个col并进行排序。@NaN我认为您误解了。github上的“问题”并不总是意味着“bug”。问题只是意味着。。。这是一个需要讨论/处理的问题,我想
mtcars%>%filter(row_number()%在%sample(n(),10))中)
应该有效吗?通常我会切片,但数据库不支持。