如何在R中系统化重排列,归组同访视相关字段?
更简洁的按访视分组调整列顺序的方法
你当前的代码已经能实现将同一访视的字段归为一组的需求,这里提供两种更直观、易维护的实现方式:
方法1:使用crossing(tidyverse风格,可读性强)
通过crossing生成访视编号与字段名的所有组合,再拼接成目标列名,逻辑清晰,后续修改字段或访视数量时更方便:
library(tidyverse) col_orders <- crossing(visit = 1:11, var = c("Total", "InstantDate", "VisitType")) %>% mutate(col_name = str_c(var, "_", visit)) %>% pull(col_name) data %>% select(all_of(col_orders))
方法2:使用outer(基础R函数,代码更简洁)
利用outer函数直接生成字段名与访视编号的所有组合,无需额外依赖:
col_orders <- as.vector(outer(c("Total", "InstantDate", "VisitType"), 1:11, paste, sep = "_")) data %>% select(all_of(col_orders))
两种方法都能实现将Total_n、InstantDate_n、VisitType_n归为一组的效果,相比手动用rep拼接,逻辑更清晰、出错概率更低,且字段或访视数量变动时,仅需修改对应向量即可。
内容的提问来源于stack exchange,提问作者Mehmet Yildirim
相关产品推荐
相关产品推荐

