在R语言中按列名后缀模式重新排列数据框列的方法
R语言灵活重排DataFrame列:按前缀配对月份列
基础R解决方案
无需额外依赖包,通过字符串处理生成目标列顺序:
# 提取列名的前缀(下划线前的部分) prefixes <- unique(sub("_.*", "", colnames(df))) # 生成每个前缀对应的目标列对:先February后September new_col_order <- unlist(lapply(prefixes, function(p) { c(paste0(p, "_February"), paste0(p, "_September")) })) # 重排DataFrame列 df_reordered <- df[, new_col_order]
说明:
sub("_.*", "", colnames(df))会去掉每个列名中_及之后的内容,提取出colA、colB这类前缀;- 遍历每个前缀,拼接出对应的
prefix_February和prefix_September列名,确保顺序符合需求; - 最后用生成的列名向量索引原DataFrame,完成重排。
tidyverse解决方案
利用dplyr、stringr和purrr包的工具,代码更简洁可读:
library(dplyr) library(stringr) library(purrr) # 提取所有唯一的列前缀 prefixes <- colnames(df) %>% str_extract("^[^_]+") %>% unique() # 按前缀分组选择列,强制按February→September的顺序排列 df_reordered <- df %>% select(map(prefixes, ~c(paste0(., "_February"), paste0(., "_September"))) %>% flatten_chr())
说明:
str_extract("^[^_]+")同样用于提取下划线前的前缀;map遍历每个前缀,生成固定顺序的列名对,避免受原列顺序影响;flatten_chr将列表转换为字符向量,作为select的参数完成列重排。
内容的提问来源于stack exchange,提问作者martinim
相关产品推荐
相关产品推荐

