rowwise类tibble使用slice_sample抽样返回全部行的原因及解决咨询
问题原因
带rowwise属性的tibble本质是每行作为独立分组的分组数据结构,你提供的df.B的groups字段可验证:10行数据对应10个独立分组,每个分组仅包含1行。
dplyr的切片类函数(包括slice_sample)默认按分组执行操作:你指定n=2时,函数会尝试从每个分组抽取2行,但每个分组仅有1行数据,因此每个分组返回全部1行,汇总后就是全部10行数据,这就是返回全部行的原因。
解决方法
无需预先将df.B转换为普通data.frame,可使用以下两种方案:
- 方案1:临时取消行分组属性完成抽样,若后续仍需要rowwise属性可执行恢复操作
library(dplyr) # 临时取消分组抽样,按需可在末尾加%>% rowwise()恢复行分组 df.B %>% ungroup() %>% slice_sample(n = 2) - 方案2:指定
by = NULL参数强制按整个数据集而非分组执行抽样,该参数在dplyr 1.1.0及以上版本支持,代码更简洁library(dplyr) df.B %>% slice_sample(n = 2, by = NULL)
内容的提问来源于stack exchange,提问作者FlyingDutch
相关产品推荐
相关产品推荐

