如何按Gene.Prop分组对DataFrame抽样:10%比例且最少5条
分组抽样添加最低条数限制的解决方案
你需要的是每组按比例抽样同时保证最低抽取条数,直接用sample_frac()没法实现这个逻辑,得换用group_modify()对每个分组单独计算抽样数量,再执行抽样。
修改后的代码
my_dataframe_1_percent <- domain_annotated_DDR_list_DE %>% filter(domain_or_af == "FALSE") %>% distinct(sgRNA.sequence, .keep_all = TRUE) %>% group_by(Gene.Prop) %>% group_modify(~ { # 计算抽样数:取组内条目数的10%和5的较大值,同时不超过组内总条数 sample_size <- max(round(nrow(.x) * 0.1), 5) sample_size <- min(sample_size, nrow(.x)) .x %>% sample_n(sample_size) }) %>% tally() %>% ungroup()
关键逻辑说明
- 用
group_modify()遍历每个分组,能针对每组的实际条目数动态计算抽样量 max(round(nrow(.x)*0.1),5)确保满足两个条件:要么抽10%,要么至少抽5条,取两者里的大数- 额外加
min(sample_size, nrow(.x))是为了避免分组条目数不足5的情况(比如某组只有3条,就直接抽取全部3条) - 如果你实际要抽的是1%而非描述里的10%,把代码里的
0.1改成0.01就行
内容的提问来源于stack exchange,提问作者Raghav Thakar
相关产品推荐
相关产品推荐

