如何在R中对混乱数据集进行修改、转置与格式转换?
基于R的数据格式转换实现方案
你需要实现的是宽格式与长格式数据的互转,以下是两种常用实现方法:
方法1:使用tidyverse包(推荐入门使用)
语法可读性高,适合数据分析新手:
- 首先安装加载依赖包
# 首次使用先执行安装 install.packages("tidyverse") # 加载包 library(tidyverse)
- 宽格式转长格式(对应左表转右表的常见场景)使用
pivot_longer()函数,示例代码如下:
# 假设你的原数据框名为df df_long <- df %>% pivot_longer( cols = 你要合并的列范围, # 可填列索引如2:5,也可填列名向量如c("列名1","列名2") names_to = "新的分类列名", # 存储原列名的新列的名称 values_to = "新的数值列名" # 存储原列对应数值的新列的名称 )
- 长格式转宽格式使用
pivot_wider()函数:
df_wide <- df_long %>% pivot_wider( names_from = 分类列名, values_from = 数值列名 )
实际使用示例
比如原宽格式数据如下:
| 姓名 | 语文 | 数学 | 英语 |
|---|---|---|---|
| 张三 | 89 | 92 | 87 |
| 李四 | 94 | 86 | 91 |
要转为目标长格式:
| 姓名 | 科目 | 分数 |
|---|---|---|
| 张三 | 语文 | 89 |
| 张三 | 数学 | 92 |
| 张三 | 英语 | 87 |
| 李四 | 语文 | 94 |
| 李四 | 数学 | 86 |
| 李四 | 英语 | 91 |
对应代码为:
df_long <- df %>% pivot_longer( cols = 语文:英语, names_to = "科目", values_to = "分数" )
方法2:使用R基础包实现
无需安装第三方依赖,用自带的reshape()函数即可实现,宽转长示例:
df_long <- reshape(df, varying = 2:4, # 要转换的列索引范围 v.names = "分数", # 输出的数值列名 timevar = "科目", # 输出的分类列名 times = c("语文","数学","英语"), # 分类列的取值 direction = "long" )
入门阶段优先使用tidyverse系列函数即可,语法简洁、报错信息更清晰,排查问题成本更低。
内容的提问来源于stack exchange,提问作者Sylvie
相关产品推荐
相关产品推荐

