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

在R中筛选month_pct与year_pct的最值及对应id、price

筛选百分比列的最值并关联对应ID和价格的R实现

我来帮你解决这个问题,这里有两种实用的R语言实现方法,能完美满足你的需求——找出month_pct和year_pct的最大值、最小值,并匹配对应的id和price,最终输出你需要的格式。

首先明确:你的数据中month_pct和year_pct是因子类型,直接计算最值会出错,所以第一步需要先提取百分比的数值部分定位最值位置,再提取原始的百分比字符串。


方法一:使用tidyverse工具包(推荐)

tidyverse的语法更直观,适合后续扩展更多列的需求,步骤如下:

  1. 先加载tidyverse包(如果没安装先运行install.packages("tidyverse"))
  2. 自定义一个函数来处理单列百分比的最值提取
  3. 对两个百分比列应用函数并合并结果
# 加载工具包
library(tidyverse)

# 定义提取最值的函数
get_extremes <- function(data, col_name) {
  # 提取因子中的百分比数值,用于定位最值位置
  col_numeric <- parse_number(as.character(data[[col_name]]))
  
  # 找到最大值和最小值的索引
  max_pos <- which.max(col_numeric)
  min_pos <- which.min(col_numeric)
  
  # 构造该列的结果行
  tibble(
    type = c("max", "min"),
    pct_type = col_name,
    pct = c(data[[col_name]][max_pos], data[[col_name]][min_pos]),
    id = c(data$id[max_pos], data$id[min_pos]),
    price = c(data$price[max_pos], data$price[min_pos])
  )
}

# 对两个百分比列应用函数并合并结果
final_result <- bind_rows(
  get_extremes(df, "month_pct"),
  get_extremes(df, "year_pct")
) %>%
  # 添加从0开始的行号
  mutate(max_min = row_number() - 1) %>%
  # 调整列顺序匹配你想要的格式
  select(max_min, type, pct_type, pct, id, price)

# 查看结果
print(final_result)

运行后你会得到和示例格式一致的输出,代码的可读性和扩展性都很强。


方法二:Base R原生实现

如果你不想加载额外包,用Base R也能完成任务,步骤更直接:

# 处理month_pct列,提取数值并找最值索引
month_vals <- as.numeric(sub("%", "", df$month_pct))
max_month_idx <- which.max(month_vals)
min_month_idx <- which.min(month_vals)

# 处理year_pct列,同样提取数值并找最值索引
year_vals <- as.numeric(sub("%", "", df$year_pct))
max_year_idx <- which.max(year_vals)
min_year_idx <- which.min(year_vals)

# 构造最终结果数据框
final_result_base <- data.frame(
  max_min = 0:3,
  type = rep(c("max", "min"), 2),
  pct_type = rep(c("month_pct", "year_pct"), each = 2),
  pct = c(df$month_pct[max_month_idx], df$month_pct[min_month_idx],
          df$year_pct[max_year_idx], df$year_pct[min_year_idx]),
  id = c(df$id[max_month_idx], df$id[min_month_idx],
         df$id[max_year_idx], df$id[min_year_idx]),
  price = c(df$price[max_month_idx], df$price[min_month_idx],
            df$price[max_year_idx], df$price[min_year_idx])
)

# 查看结果
print(final_result_base)

这种方法不需要依赖任何第三方包,代码简洁直接,适合快速处理简单需求。


运行任意一种方法,你都会得到符合要求的结果,比如针对你的示例数据,最终结果会显示:

  • month_pct的最大值是8.53%(对应id=1,price=40.59),最小值是-19.91%(对应id=10,price=1.77)
  • year_pct的最大值是1.54%(对应id=7,price=54.79),最小值是-35.26%(对应id=1,price=40.59)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:02:51