如何在R语言中按指定列相同值将长表转宽表重塑数据集
在R语言中实现数据行转列的重塑操作
原始数据集
| Parameter | Date | Value |
|---|---|---|
| X | 1 | 12 |
| Y | 1 | 14 |
| Z | 1 | 15 |
| X | 2 | 10 |
| Y | 2 | 09 |
| Z | 2 | 22 |
| X | 3 | 08 |
| Y | 3 | 07 |
| Z | 3 | 20 |
预期结果
| Date | X | Y | Z |
|---|---|---|---|
| 1 | 12 | 14 | 15 |
| 2 | 10 | 09 | 22 |
| 3 | 08 | 07 | 20 |
实现方法
方法1:使用tidyr包的pivot_wider()函数
tidyr是tidyverse生态下的核心数据处理包,pivot_wider()专门用于行转列的重塑操作:
- 安装并加载包(首次使用时执行安装步骤):
# 安装包 install.packages("tidyr") # 加载包 library(tidyr)
- 执行数据重塑:
# 构造示例数据集(若已有现成数据集可跳过此步) df <- data.frame( Parameter = c("X", "Y", "Z", "X", "Y", "Z", "X", "Y", "Z"), Date = c(1,1,1,2,2,2,3,3,3), Value = c(12,14,15,10,9,22,8,7,20) ) # 行转列操作 result_df <- pivot_wider(df, id_cols = Date, # 作为行分组的依据列 names_from = Parameter, # 转为新列名的原列 values_from = Value) # 填充新列值的来源列
方法2:使用reshape2包的dcast()函数
reshape2是经典的数据重塑工具包,dcast()可快速实现此类转换:
- 安装并加载包(首次使用时执行安装步骤):
# 安装包 install.packages("reshape2") # 加载包 library(reshape2)
- 执行数据重塑:
# 使用上述示例数据集df result_df <- dcast(df, Date ~ Parameter, value.var = "Value")
公式Date ~ Parameter表示以Date作为行标识,Parameter的取值作为新列名,value.var指定填充单元格的数值来源列。
内容的提问来源于stack exchange,提问作者SHAH
相关产品推荐
相关产品推荐

