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

如何在R语言数据框的年度收益列旁添加对应列的排名列

解决方案

你的问题出在mutate(across(...))的用法上——直接对目标列应用rank()会替换原始列,而非新增列。要保留原始数据同时添加排名列,需要用across的.names参数指定新列命名规则,生成新列而非覆盖原列。

修正后的代码

library(dplyr)

# 假设cnam_year2是存储年度列名的向量
test <- yearRetsMSA2 %>%
  mutate(across(all_of(cnam_year2), 
                ~rank(.), 
                .names = "{.col}_Rank"))

代码说明

  • all_of(cnam_year2):确保正确引用你的列名向量,避免列名解析报错
  • ~rank(.):对每一列计算排名(.代表当前处理的列)
  • .names = "{.col}_Rank":指定新列名为原列名加_Rank后缀,比如原列1995 Return会生成1995 Return_Rank

运行后,数据框会保留所有原始年度收益列,同时在每一列旁新增对应的排名列。

示例验证

用你提供的样本数据测试:

# 加载样本数据
yearRetsMSA2 <- structure(list(`1995 Return` = c(0.0151000000000001, 0.0463), 
                               `1996 Return` = c(0.0361540734902965, 0.050750262830928), 
                               `1997 Return` = c(0.036223616657159, 0.049208659268692)), 
                          row.names = c("Abilene, TX", "Akron, OH"), class = "data.frame")

cnam_year2 <- colnames(yearRetsMSA2)

# 执行修正代码
test <- yearRetsMSA2 %>%
  mutate(across(all_of(cnam_year2), ~rank(.), .names = "{.col}_Rank"))

# 查看结果
print(test)

输出会同时包含原始列和排名列:

1995 Return 1996 Return 1997 Return 1995 Return_Rank 1996 Return_Rank 1997 Return_Rank
Abilene, TX    0.015100   0.03615407   0.03622362                 1                 1                 1
Akron, OH      0.046300   0.05075026   0.04920866                 2                 2                 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:15:03