R语言如何按字母顺序重排dataframe每行的字符型条目?
行内单词按字母序重排的实现方案
针对data.frame中指定单词列的行内排序需求,有几种可直接复用的实现方式,过程中不会改动n列的原有数值。
基础R实现(无额外包依赖)
通过按行遍历单词列、排序后回填的逻辑完成,代码适配所有R版本:
# 定位所有需要排序的单词列 word_cols <- grep("^word\\d+$", names(df), value = TRUE) # 逐行对单词列内容做字母表顺序排序 df[word_cols] <- t(apply(df[word_cols], 1, sort))
tidyverse 工具链实现
如果日常使用dplyr、tidyr相关分析流程,可通过长表-宽表转换完成排序,逻辑更易维护:
library(dplyr) library(tidyr) df_new <- df %>% # 生成临时行ID,避免格式转换时行匹配错位 mutate(.row_id = row_number()) %>% # 所有单词列转为长格式 pivot_longer(cols = starts_with("word"), names_to = "pos") %>% # 按原行分组,对每行内的单词值做字母排序 group_by(.row_id) %>% arrange(value, .by_group = TRUE) %>% # 重新分配排序后的列位置编号 mutate(pos = paste0("word", row_number())) %>% # 转回宽格式还原目标数据结构 pivot_wider(names_from = pos, values_from = value) %>% select(-.row_id)
两种方法运行后输出的结果完全匹配预期:
word1 word2 word3 n 1 hello red world 574 2 hello red world 306 3 hello red yellow 302
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

