我有一个细胞条形码(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
2条答案
按热度按时间6pp0gazn1#
我同意这在dplyrv1.0中是一个令人烦恼的问题
最好的解决方案是更新到dplyr v1.1.0,它正确地实现了slice_sample。
另请参见https://github.com/tidyverse/dplyr/issues/6185
oaxa6hgo2#
要获取大于数据的样本,需要定义参数
replace = TRUE
,因此: