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

