使用 R 重塑数据
介绍
在预测建模中,通常需要重塑数据以使其准备好进行分析或构建模型。将数据转换为清晰、简单且理想的形式是数据科学不可或缺的一部分。最常见的重塑过程是将数据从宽格式转换为长格式,反之亦然。
在本指南中,您将了解在 R 中重塑数据的技术。R 中有许多强大的库可以执行此任务,您将了解两个这样的包:reshape2和tidyr。
数据
在本指南中,我们将使用三个科目中五名学生的成绩(满分 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函数可执行此任务。
下面的第一行代码加载库,而第二行将数据融入长格式。需要指定的参数概述如下:
参数“id.vars”:指定要保留且不拆分的变量
参数“measure.vars”:代表源列
参数“variable.name”:表示将标识值来源的原始变量的目标列
参数“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 中数据科学的更多信息,请参阅以下指南:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~