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

使用dplyr的arrange()函数排序奥运奖牌CSV数据遇问题求助

解决dplyr::arrange()排序奥运奖牌数据的问题

问题场景

你有2022北京奥运奖牌CSV文件,格式为Country;Gold;Silver;Bronze,目标是用arrange()按金牌、银牌、铜牌降序排序(金银牌数相同时按铜牌数降序),但两次尝试均出现问题:

  • 直接使用列名时,报错object 'Gold' not found
  • 用单引号包裹列名后无报错,但排序未生效

问题根源

  1. 列名未找到报错:核心原因是读取CSV时未指定分隔符为分号,默认逗号分隔会导致数据未被正确拆分,实际列名并非Gold这类独立名称,而是包含分号的整串文本。
  2. 单引号列名不生效:desc('Gold')是对字符串常量'Gold'做降序操作,而非针对数据框的列排序——所有行的这个值都相同,自然不会改变数据顺序。

解决方案

1. 正确读取分号分隔的CSV

必须指定分隔符参数,确保数据被正确拆分:

# Base R 读取方式
beijing2022Medals <- read.csv("你的文件路径.csv", sep = ";")

# Tidyverse 读取方式(需先加载readr包)
library(readr)
beijing2022Medals <- read_csv("你的文件路径.csv", delim = ";")

2. 用正确语法执行排序

确认列名正确后,直接使用裸列名(无需引号)结合desc()排序,注意要先加载dplyr包:

library(dplyr)
# 基础写法
sorted_medals <- arrange(beijing2022Medals, desc(Gold), desc(Silver), desc(Bronze))

# 管道写法更直观
sorted_medals <- beijing2022Medals %>%
  arrange(desc(Gold), desc(Silver), desc(Bronze))

3. 验证列名(可选)

若仍有疑问,运行以下代码查看数据框的实际列名,确保和代码中的名称完全一致(注意大小写、空格等细节):

colnames(beijing2022Medals)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:05:19