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

R语言中仅按含*标记数值的最大绝对值对dataframe行排序的方法

实现代码

Base R 版本(无需额外安装包)

# 构造示例数据
a <- c("5*", 7, 9, "11***")
b <- c("-8*", "-10*", -3, -1)
c <- c(-4, -1, "-6**", "3*")
df <- data.frame(a,b,c)

# 计算每行的排序权重:仅取带*元素的最大绝对值
sort_weight <- apply(df, 1, function(row_items) {
  # 筛选当前行带*的元素
  star_items <- row_items[grepl("\\*", row_items)]
  # 去掉所有*后转数值、取绝对值,求最大值
  max(abs(as.numeric(gsub("\\*+", "", star_items))), na.rm = TRUE)
})

# 按权重从高到低排序
df_sorted <- df[order(-sort_weight), ]

Tidyverse 版本

library(dplyr)

df_sorted <- df %>%
  rowwise() %>%
  mutate(
    # 计算当前行带*元素的最大绝对值作为排序键
    sort_key = max(abs(as.numeric(gsub("\\*+", "", c_across(everything()))[grepl("\\*", c_across(everything()))])), na.rm = T)
  ) %>%
  ungroup() %>%
  arrange(desc(sort_key)) %>%
  select(-sort_key)

输出结果

运行上述代码后得到的排序结果和预期一致:

a    b     c
4 11***   -1    3*
2     7 -10*    -1
1    5*  -8*    -4
3     9   -3 -6**

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:48:04