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

R语言表格转换:将长格式数据按cases与poblacion转为宽格式

长格式转宽格式解决方案

原始长格式数据

pais        anio tipo          cuenta
   <chr>      <int> <chr>          <int>
 1 Afganistán  1999 casos            745
 2 Afganistán  1999 población   19987071
 3 Afganistán  2000 casos           2666
 4 Afganistán  2000 población   20595360
 5 Brasil      1999 casos          37737
 6 Brasil      1999 población  172006362
 7 Brasil      2000 casos          80488
 8 Brasil      2000 población  174504898
 9 China       1999 casos         212258
10 China       1999 población 1272915272
11 China       2000 casos         213766
12 China       2000 población 1280428583

目标宽格式数据

pais        anio  casos  poblacion
  <chr>      <int>  <int>      <int>
1 Afganistán  1999    745   19987071
2 Afganistán  2000   2666   20595360
3 Brasil      1999  37737  172006362
4 Brasil      2000  80488  174504898
5 China       1999 212258 1272915272
6 China       2000 213766 1280428583

解决方案

mutate()和filter()无法实现需求,因为这两个函数仅用于修改列值、筛选行数据,不能完成表格结构的宽长转换。推荐使用tidyverse生态下tidyr包的pivot_wider()函数,这是专门处理此类格式转换的工具:

代码实现

# 加载tidyverse(包含tidyr和dplyr)
library(tidyverse)

# 假设你的原始数据框名为df,执行转换
df_wide <- df %>%
  pivot_wider(
    id_cols = c(pais, anio),  # 保留作为分组依据的列
    names_from = tipo,        # 将该列的取值转为新列名
    values_from = cuenta      # 新列对应的数值来源
  )

旧版替代写法(tidyr 1.0.0之前版本)

如果使用较旧版本的tidyr,可以用spread()函数:

df_wide <- df %>%
  spread(key = tipo, value = cuenta)

运行上述代码后,就能得到你需要的宽格式数据。

内容的提问来源于stack exchange,提问作者Franco Ramirez Castillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:11:17