使用 R 重塑数据

发布日期:2026-06-25 05:41:03   来源 : 杭州电子商务研究院    浏览量 :12
杭州电子商务研究院 发布日期:2026-06-25 05:41:03  
12

介绍

在预测建模中,通常需要重塑数据以使其准备好进行分析或构建模型。将数据转换为清晰、简单且理想的形式是数据科学不可或缺的一部分。最常见的重塑过程是将数据从宽格式转换为格式反之亦然。

在本指南中,您将了解在 R 中重塑数据的技术。R 中有许多强大的库可以执行此任务,您将了解两个这样的包:reshape2tidyr

数据

在本指南中,我们将使用三个科目中五名学生的成绩(满分 100 分)的简单虚构数据。让我们首先使用下面的代码行创建示例数据。我们还将把学号转换为因子变量,因为这将有助于数据整理。

      df_wide <- read.table(header=TRUE, text='
     Rollno name   math science english
       1   Name1     80  72  77
       2   Name2     65  80  71
       3   Name3     45  54  67
       4   Name4     95  73  70
')

df_wide$Rollno <- factor(df_wide$Rollno) 

head(df_wide)
    

输出:

      |   	| Rollno 	| name  	| math 	| science 	| english 	|
|---	|--------	|-------	|------	|---------	|---------	|
| 1 	| 1      	| Name1 	| 80   	| 72      	| 77      	|
| 2 	| 2      	| Name2 	| 65   	| 80      	| 71      	|
| 3 	| 3      	| Name3 	| 45   	| 54      	| 67      	|
| 4 	| 4      	| Name4 	| 95   	| 73      	| 70      	|
    

我们将在后续部分中使用这些简单的数据来执行重塑任务。

使用“reshape2”

reshape2是一个由 Hadley Wickham 编写的 R 包,它可以轻松地在宽格式和长格式之间转换数据。宽数据为每个变量都留有一列,而长数据则不是必需的。

宽到长转换

有时您可能需要将宽数据重塑为长格式。'reshape2 ' 中的melt函数可执行此任务。

下面的第一行代码加载库,而第二行将数据融入长格式。需要指定的参数概述如下:

  1. 参数“id.vars”:指定要保留且不拆分的变量

  2. 参数“measure.vars”:代表源列

  3. 参数“variable.name”:表示将标识值来源的原始变量的目标列

  4. 参数“value.name”:代表值,在我们的数据中是考试成绩

结果数据存储在新的数据框“df_long”中。下面的第三行代码打印此结果数据集,该数据集现在包含 4 个变量的 12 个观测值。

      library(reshape2)

df_long <- melt(df_wide, id.vars=c("Rollno", "name"), measure.vars=c("math", "science", "english" ), variable.name="subject", value.name="marks"
)

df_long
    

输出:

      | Rollno  	| name  	| subject 	| marks 	|
|---------	|-------	|---------	|-------	|
| 1       	| Name1 	| math    	| 80    	|
| 2       	| Name2 	| math    	| 65    	|
| 3       	| Name3 	| math    	| 45    	|
| 4       	| Name4 	| math    	| 95    	|
| 1       	| Name1 	| science 	| 72    	|
| 2       	| Name2 	| science 	| 80    	|
| 3       	| Name3 	| science 	| 54    	|
| 4       	| Name4 	| science 	| 73    	|
| 1       	| Name1 	| english 	| 77    	|
| 2       	| Name2 	| english 	| 71    	|
| 3       	| Name3 	| english 	| 67    	|
| 4       	| Name4 	| english 	| 70    	|
    

长到宽的转换

在上一节中,我们从宽数据创建了长数据。要将长数据转换回宽格式,我们可以使用cast函数。有许多转换函数,但我们将使用dcast函数,因为它用于数据帧。

下面的代码行将执行此转换。

      data_wide <- dcast(df_long, Rollno + name ~ subject, value.var="marks")
data_wide
    

输出:

      |   	| Rollno 	| name  	| math 	| science 	| english 	|
|---	|--------	|-------	|------	|---------	|---------	|
| 1 	| 1      	| Name1 	| 80   	| 72      	| 77      	|
| 2 	| 2      	| Name2 	| 65   	| 80      	| 71      	|
| 3 	| 3      	| Name3 	| 45   	| 54      	| 67      	|
| 4 	| 4      	| Name4 	| 95   	| 73      	| 70      	|
    

使用“tidyr”

tidyr包也可用于重塑数据。它使用gather函数将数据从宽格式转换为长格式,并使用spread函数将其从长格式转换为宽格式。

宽到长转换

下面的第一行代码加载库,第二行将数据重新整形为长格式。第三行打印结果数据。

      library(tidyr)

df_long_tidyr <- gather(df_wide, subject, marks, math:english, factor_key=TRUE)

df_long_tidyr
    

输出:

      | Rollno  	| name  	| subject 	| marks 	|
|---------	|-------	|---------	|-------	|
| 1       	| Name1 	| math    	| 80    	|
| 2       	| Name2 	| math    	| 65    	|
| 3       	| Name3 	| math    	| 45    	|
| 4       	| Name4 	| math    	| 95    	|
| 1       	| Name1 	| science 	| 72    	|
| 2       	| Name2 	| science 	| 80    	|
| 3       	| Name3 	| science 	| 54    	|
| 4       	| Name4 	| science 	| 73    	|
| 1       	| Name1 	| english 	| 77    	|
| 2       	| Name2 	| english 	| 71    	|
| 3       	| Name3 	| english 	| 67    	|
| 4       	| Name4 	| english 	| 70    	|
    

长到宽的转换

下面的代码行使用“spread”函数返回宽格式的原始数据。

      df_wide_tidyr <- spread(df_long_tidyr, subject, marks)
df_wide_tidyr
    

输出:

      |   	| Rollno 	| name  	| math 	| science 	| english 	|
|---	|--------	|-------	|------	|---------	|---------	|
| 1 	| 1      	| Name1 	| 80   	| 72      	| 77      	|
| 2 	| 2      	| Name2 	| 65   	| 80      	| 71      	|
| 3 	| 3      	| Name3 	| 45   	| 54      	| 67      	|
| 4 	| 4      	| Name4 	| 95   	| 73      	| 70      	|
    

转置数据

转置函数将行反转为列,反之亦然。它可能是重塑数据集最简单的方法,它使用 t ()函数转置矩阵或数据框,如下所示。

      t(df_wide)
    

输出:

结论

在本指南中,您学习了使用“reshape2”和“tidyr”包的两种流行的数据重塑技术。您还学习了如何转置数据。这些工具将帮助您将数据转换为更易于分析的格式。要了解有关 R 中数据科学的更多信息,请参阅以下指南:

  1. 使用 R 的描述性统计解释数据

  2. 使用 R 统计模型解释数据

  3. 使用 R 进行时间序列预测

  4. 假设检验 - 用统计模型解释数据

  5. 使用 R 对文本数据进行机器学习

  6. 使用 R 中的词云对文本数据进行可视化

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据