R语言如何将长表转换为宽表,应如何处理对应取值字段
R长表转宽表操作方案
你需要实现的是长表转宽表的结构化转换,推荐使用tidyverse生态的pivot_wider函数完成,具体操作如下:
操作代码
首先加载依赖包,再执行转换:
# 加载tidyverse(包含dplyr和tidyr工具集) library(tidyverse) # 执行宽表转换 df_wide <- df %>% pivot_wider( id_cols = c(Class, standard), # 保留为行标识的分组列,不参与展开 names_from = Subject, # 取该列的唯一值作为新生成的宽表列名 values_from = Score, # 取该列的数值填充到新生成的宽表单元格中 values_fill = NA # 缺失单元格默认填充为NA,如需统一填0可修改为values_fill = 0 )
备选方案(reshape2包)
如果习惯使用reshape2的dcast函数,也可以用以下代码实现完全相同的转换效果:
library(reshape2) df_wide <- dcast(df, Class + standard ~ Subject, value.var = "Score", fill = NA)
转换后结果示例
最终输出的宽表结构如下:
| Class | standard | Math | ELA | PE | Art |
|---|---|---|---|---|---|
| A | A | 95 | NA | NA | NA |
| A | U | NA | 80 | NA | NA |
| B | B | 73 | 82 | NA | NA |
| B | U | NA | NA | 75 | NA |
| C | U | NA | 80 | NA | NA |
| C | C | 82 | NA | NA | 88 |
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

