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

如何在R语言中将城市间贸易数据转换为宽格式/透视格式?

解决R数据框重塑问题:合并同贸易线路的售卖/采购价格

可以用tidyverse工具包快速实现这个需求,操作步骤如下:

1. 加载依赖工具包

先确保安装并加载dplyr和tidyr:

install.packages("tidyverse")
library(tidyverse)

2. 预处理数据

采购记录的视角和售卖记录相反,需要先把采购记录的城市与目的地互换,同时统一标识字段方便后续重塑:

df_processed <- df %>%
  mutate(
    # 交换采购记录的城市和目的地,统一到「出发城市→目的地」的线路视角
    city = ifelse(Flow == "Purchase", Destination, city),
    Destination = ifelse(Flow == "Purchase", city, Destination)
  ) %>%
  # 将Flow转换为目标列名
  mutate(Flow = case_when(
    Flow == "Sell" ~ "Sell_P",
    Flow == "Purchase" ~ "Purch_P"
  ))

3. 重塑为宽格式数据

用pivot_wider把同一贸易线路的售卖、采购价格合并到同一行:

final_df <- df_processed %>%
  pivot_wider(
    id_cols = c(Product, city, Destination),
    names_from = Flow,
    values_from = Price,
    values_fill = NA # 缺失价格用NA填充
  ) %>%
  # 修正城市名称大小写,匹配目标输出格式
  mutate(city = str_to_title(city))

最终结果

运行后得到的final_df就是你需要的格式:

> final_df
# A tibble: 2 × 5
  Product city       Destination Sell_P Purch_P
  <chr>   <chr>      <chr>        <dbl>   <dbl>
1 Cars    London     Liverpool     1000    1100
2 Bike    Manchester Bristol       1700      NA

额外说明

  • 交换采购记录的城市与目的地,是为了让所有记录统一到「出发城市向目的地售卖」的线路维度上,确保同一贸易线路的信息能合并到一行
  • 如果习惯用基础R,也可以用reshape函数实现,但代码逻辑会更繁琐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:57:23