R语言 函数slice_sample给出错误,无法获取大于总体的样本

bfhwhh0e  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(163)

我有一个细胞条形码(V1)和细胞类型(V2)的数据框,我想随机抽样1000每种细胞类型,除非有少于1000总数,然后所有应选择。
然而slice_sample在遇到少于1000行的单元格类型时会给出错误。尽管文档中声明“如果n大于组中的行数(或prop〉1),结果将被静默地截断为组大小。”我不想使用替换进行采样。我误解了文档吗?

sample_cells <- as.data.frame(all_cells) %>% group_by(V2) %>% slice_sample(n=1000)

slice_sample()中的错误:!计算索引时出现问题。第10组出现错误:V2 =“PEC”。由sample.int()中的错误引起:!当“replace = FALSE”时,无法获取大于总体的样本。请运行rlang::last_error()以查看错误发生的位置。
我希望为n〉1000的单元格类型获取1000行,为n〈1000的单元格类型获取所有行。
dplyr版本1.0.10

6pp0gazn

6pp0gazn1#

我同意这在dplyrv1.0中是一个令人烦恼的问题
最好的解决方案是更新到dplyr v1.1.0,它正确地实现了slice_sample。

birds <- tibble(Areas = c(rep("City", 40), rep("Beach", 60), rep("Forest",100)), Species = sample(c("Robin", "Seagul", "Owl"), size = 200, replace = T))

# Select 30 rows from each Area
birds %>% group_by(Areas) %>% slice_sample(n = 30) %>% .$Areas %>% table

# Select 50 rows from each Area. Because there are only 40 city birds, those are selected (this gave an error in earlier dplyr versions)
birds %>% group_by(Areas) %>% slice_sample(n = 50) %>% .$Areas %>% table

另请参见https://github.com/tidyverse/dplyr/issues/6185

oaxa6hgo

oaxa6hgo2#

要获取大于数据的样本,需要定义参数replace = TRUE,因此:

slice_sample(replace = TRUE)

相关问题