dplyr' s sample_n()
似乎只是针对数据帧而不是单个SQL-Backend实现的。是否可以使用ORDER BY rand()
来利用MySQL arrange
?这与dplyr的head
结合使用会更好,并且会允许类似的功能。
答案 0 :(得分:1)
如果目标是在没有替换的情况下对n
行进行抽样,则只需sample
行号和filter
即可。
因此,如果我们想从mtcars
中选择5个随机行,我们可以写:
filter(mtcars, row_number() %in% sample(n(), 5))
这仍然是单行,但它比普通sample_n
更受限制,因为您无法通过替换来执行此操作(您无法通过过滤多次选择行)。从好的方面来说,filter
,row_number
和n
应适用于所有来源。
请注意,如果表已分组,则将从每个组中抽取5行。如果你想要一个分数(比如每组50%),你可以写:
mtcars %>%
group_by(cyl) %>%
filter(row_number() %in% sample(n(), round(0.5 * n())))
如果您想进行加权抽样,可以直接向prob
中的sample
参数提供变量:
filter(mtcars, row_number() %in% sample(n(), 5, prob = disp))
此次再次采样5行,但更有可能选择disp
更高的行。