You need to enable JavaScript to run this app. R语言如何按字母顺序重排dataframe每行的字符型条目?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 11:45:02