slice_max函数设置n=0是否不可行?执行后未生效问题咨询
问题原因与解决方法
原因
slice_max()的n参数用于指定每个分组要保留的行数,当你设置n=0时,dplyr不会执行任何行剔除操作——因为要求保留0行的逻辑在分组处理中被默认忽略,最终返回原分组的全部数据,所以df_sliced和原数据框df完全一致。
解决方法
根据你的实际需求选择对应方案:
- 保留每个分组中
n最大的1行:将n设为1,这是slice_max()的常规用法df_sliced <- df %>% group_by(group) %>% slice_max(n=1, order_by=n, with_ties = FALSE) - 剔除每个分组中
n最大的行:可以用过滤逻辑直接排除最大值行,或者反向利用排序函数# 方案1:过滤掉等于最大值的行 df_sliced <- df %>% group_by(group) %>% filter(n != max(n)) # 方案2:用slice_min取除最大值外的所有行 df_sliced <- df %>% group_by(group) %>% slice_min(n= n(), order_by=desc(n), with_ties = FALSE) - 生成空数据框(确实要保留0行):直接用
filter(FALSE)替代slice_max(n=0)df_sliced <- df %>% group_by(group) %>% filter(FALSE)
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

