You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何按学期顺序对tibble对象的列进行排序

解决方法

问题原因

直接使用str_sort排序失效的原因是字符串默认按字典序排序,首字母F(Fall)的优先级高于S(Spring),会导致同一年份的秋季排在春季前面,不符合学期时间逻辑。

实现思路

将列名拆解为「学期类型」和「年份」两个维度,先按年份升序排序,同一年份内强制Spring排在Fall前即可。

代码实现

tidyverse风格完整实现

library(tidyverse)

# 生成排序后的列名向量
sorted_cols <- names(dataSet) %>%
  enframe(value = "col_name", name = NULL) %>%
  # 拆分学期和年份
  separate(col_name, into = c("term", "year"), sep = " ", remove = FALSE) %>%
  mutate(
    year = as.numeric(year),
    # 定义学期顺序,Spring在前
    term = factor(term, levels = c("Spring", "Fall"))
  ) %>%
  arrange(year, term) %>%
  pull(col_name)

# 重排tibble列
dataSet_sorted <- dataSet %>%
  select(all_of(sorted_cols))

简洁版实现(无需额外拆分行)

# 提取年份和学期权重
col_year <- as.numeric(str_extract(names(dataSet), "\\d{4}"))
col_term_weight <- ifelse(str_starts(names(dataSet), "Spring"), 1, 2)

# 按规则排序后重排列
sorted_cols <- names(dataSet)[order(col_year, col_term_weight)]
dataSet_sorted <- dataSet %>% select(all_of(sorted_cols))

内容的提问来源于stack exchange,提问作者lurodrig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:03