如何在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
相关产品推荐
相关产品推荐

