我有一个数据帧:
> class(dataset)
[1] "grouped_df" "tbl_df" "tbl" "data.frame"
> dim(dataset)
[1] 64480 39
Run Code Online (Sandbox Code Playgroud)
我想从中抽取50.000个样本
> dataset %>% dplyr::sample_n(50000)
Run Code Online (Sandbox Code Playgroud)
但一直给我错误
Error: Sample size (50000) greater than population size (1). Do you want replace = TRUE?
Run Code Online (Sandbox Code Playgroud)
但是,例如,这有效:
> dim(dataset[1] %>% dplyr::sample_n(50000))
[1] 50000 1
Run Code Online (Sandbox Code Playgroud)
那么为什么我的人口规模(1)- 这是否与分组有关?
是的,它可能与分组有关.正如您从class(dataset)数据输出中看到的那样,当前已经对数据进行了分组(注意grouped_df信息),并且一个或多个组显然只有极少的观察结果,无需替换即可对50000个观测值进行采样.
要解决此问题,您可以在采样前取消组合数据:
dataset %>% ungroup() %>% sample_n(50000)
Run Code Online (Sandbox Code Playgroud)
或者您可以替换样品:
dataset %>% sample_n(50000, replace = TRUE)
Run Code Online (Sandbox Code Playgroud)