我有600个参与者的数据框。我想得到一个近似的代表性样本,这个DF的基础上关闭年龄,性别,性别,网站,和教育n=20。它不需要完全匹配,但R不喜欢它不完全匹配。到目前为止,我已经尝试了这个代码,但它不工作。有什么建议吗?
sample_size <- 30
sampled_data <- IGNITE %>%
group_by(screen_gender, age_nih_reg, screen_site, educ, screen_race) %>%
sample_n(size = sample_size, replace = FALSE) %>%
ungroup()
Error in `sample_n()`:
! Can't compute indices.
ℹ In group 1: `screen_gender = 1`, `age_nih_reg = 65`, `screen_site = 1`,
`educ = 13`, `screen_race = 1`.
Caused by error:
! `size` must be less than or equal to 1 (size of data).
ℹ set `replace = TRUE` to use sampling with replacement.
Backtrace:
1. ... %>% ungroup()
15. base::local(...)
16. base::eval.parent(substitute(eval(quote(expr), envir)))
17. base::eval(expr, p)
18. base::eval(expr, p)
19. base::eval(...)
20. base::eval(...)
21. dplyr:::check_size(sample_size, n(), replace = replace)
1条答案
按热度按时间uxhixvfz1#
由于您的组太小,简单的方法失败了。
我曾经将类似的东西黑客到{splitTools}中,这是一个为ML任务进行数据拆分的软件包。
有两个步骤:
1.运行kmeans以按指定的特征对行进行聚类。要素已缩放。有序因子是整数编码的,并且正常因子/字符向量是虚拟编码的。不要做太多的集群。在下面的代码中,我使用了6,这可能太大了。
1.使用集群ID进行分层拆分,以获得所需的组大小。