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

请求将凌乱的R数据处理代码改写为标准dplyr链式风格

整洁化dplyr风格代码改写方案

完整改写后的管道式代码

library(dplyr)
library(tidyr)
library(readxl)
library(readr)

new_long <- read_excel("data/ddd_dataset.xlsx") %>%
  # 筛选目标指标数据
  filter(`Indicator name` == "Population covered by at least a 4G mobile network (%)") %>%
  # 移除指定行,保留所需列
  slice(-c(1553, 1554)) %>%
  select(Country, Year, Value) %>%
  # 按国家名称排序
  arrange(Country) %>%
  # 转换为宽表格式
  pivot_wider(names_from = Year, values_from = Value) %>%
  # 执行数据插补:转长表处理后转回宽表
  pivot_longer(-Country, names_to = "year") %>%
  mutate(value = as.numeric(value)) %>%
  group_by(Country) %>%
  fill(value, .direction = "updown") %>%
  pivot_wider(names_from = year, values_from = value) %>%
  # 合并国家名称映射表(直接在管道内处理映射表)
  left_join(
    read_csv("data/itu-emi-countries.csv") %>% rename(Country = `ITU Name`),
    by = "Country"
  ) %>%
  # 替换为EMI标准国家名称,保留前10列
  mutate(Country = `EMI Name`) %>%
  select(1:10) %>%
  # 转换为最终的长表格式
  pivot_longer(-Country, names_to = "year", values_to = "x") %>%
  mutate(across(year, as.numeric))

核心优化说明

  • 全程使用%>%管道串联所有操作,消除冗余中间变量,逻辑连贯易读
  • 用dplyr的filter()替代原生行索引筛选,slice()替代位置删除,select()替代列索引,完全贴合tidyverse语法
  • 用tidyr的pivot_wider()替代旧版spread(),保持函数的一致性和兼容性
  • 修正left_join()的参数错误:dplyr中统一使用by = "匹配列名",而非原生的by.x/by.y
  • 将国家映射表的读取、重命名直接整合进管道,避免单独创建中间对象
  • 每一步添加简洁注释,明确代码功能,提升可维护性

内容的提问来源于stack exchange,提问作者Saïd Maanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:36:21