如何使用dplyr::group_walk按数据框原始顺序迭代分组?
保留dplyr::group_walk的原始分组迭代顺序
要让group_walk按数据框的原始分组顺序迭代,有两种简单可行的方法:
方法1:使用group_by的.sort = FALSE参数
dplyr的group_by默认会对分组键进行排序(字符型按字母顺序,数值型按大小),只需在分组时设置.sort = FALSE,就能保留分组键的原始出现顺序,group_walk会遵循这个顺序迭代:
library(dplyr) # 构造原始数据 df <- tibble( group = c("C", "B", "A"), values = c(1, 2, 3) ) # 按原始分组顺序迭代 df %>% group_by(group, .sort = FALSE) %>% group_walk(~ print(.x$values)) # 输出结果:1,2,3
方法2:将分组列转为因子(指定原始顺序为水平)
如果需要长期固定分组顺序,可以把分组列转换为因子型,将原始出现的顺序设为因子水平,这样后续任何分组操作都会保留该顺序:
# 将group列转为因子,水平为原始出现顺序 df <- df %>% mutate(group = factor(group, levels = unique(group))) # 分组并迭代 df %>% group_by(group) %>% group_walk(~ print(.x$values)) # 输出结果:1,2,3
补充说明
group_walk的迭代顺序完全由group_by后的分组顺序决定,并非始终强制按排序后的顺序执行——默认排序是group_by的默认行为,而非group_walk的固有限制。通过上述两种方法,就能轻松实现按原始顺序迭代。
内容的提问来源于stack exchange,提问作者crestor
相关产品推荐
相关产品推荐

