数据重塑:长宽数据转换【基于tidyr】

在这里插入图片描述

在数据分析和可视化过程中,数据的组织形式直接影响着我们能够进行的分析类型和可视化效果。这里简单介绍两种常见的数据格式:长格式(Long Format)和宽格式(Wide Format),以及如何使用tidyr包进行转换。

什么是长格式和宽格式数据?

宽格式(Wide Format)

  • 每个观测单位占用一行
  • 每个变量占用一列
  • 适合人类直观阅读
  • 常见于Excel表格

例如,一个记录学生各科成绩的宽格式数据:

# 宽格式数据示例
student_scores_wide <- data.frame(student_id = c(1, 2, 3),math = c(85, 92, 78),english = c(92, 88, 95),science = c(90, 85, 88)
)

长格式(Long Format)

  • 每个观测值占用一行
  • 包含标识变量和值变量
  • 适合统计分析和可视化
  • 符合"整洁数据"原则

同样的数据在长格式下的表现:

# 长格式数据示例
student_scores_long <- data.frame(student_id = rep(1:3, each = 3),subject = rep(c("math", "english", "science"), 3),score = c(85, 92, 90, 92, 88, 85, 78, 95, 88)
)

为什么需要进行格式转换?

  1. 可视化需求

    • ggplot2更适合处理长格式数据
    • 某些图形(如多系列折线图)需要长格式数据
  2. 统计分析

    • 许多统计函数需要特定格式的数据
    • 长格式更适合进行分组统计和建模
  3. 数据整理

    • 不同来源的数据可能格式不同
    • 需要统一格式进行合并或比较

使用tidyr进行转换

宽转长(Wide to Long)

使用 pivot_longer() 函数:

library(tidyr)
library(dplyr)# 创建示例数据
sales_wide <- data.frame(store = c("A", "B", "C"),jan = c(100, 120, 90),feb = c(110, 130, 95),mar = c(120, 140, 100)
)# 转换为长格式
sales_long <- sales_wide %>%pivot_longer(cols = jan:mar,           # 要转换的列names_to = "month",       # 新的分类变量名values_to = "sales"       # 新的数值变量名)

长转宽(Long to Wide)

使用 pivot_wider() 函数:

# 转回宽格式
sales_wide_again <- sales_long %>%pivot_wider(names_from = month,      # 作为新列名的变量values_from = sales      # 填充值的来源变量)

实际案例:销售数据可视化

让我们通过一个完整的例子来展示数据转换和可视化的过程:

library(ggplot2)
library(tidyr)
library(dplyr)# 创建示例数据
sales_data <- data.frame(store = rep(c("Store A", "Store B"), each = 12),month = rep(1:12, 2),sales_2022 = c(100, 110, 120, 115, 125, 130, 140, 145, 135, 130, 120, 110,90, 95, 100, 105, 110, 115, 120, 125, 115, 110, 100, 95),sales_2023 = c(110, 120, 130, 125, 135, 140, 150, 155, 145, 140, 130, 120,100, 105, 110, 115, 120, 125, 130, 135, 125, 120, 110, 105)
)# 转换为长格式
sales_long <- sales_data %>%pivot_longer(cols = starts_with("sales"),names_to = "year",values_to = "sales",names_prefix = "sales_")# 创建可视化
ggplot(sales_long, aes(x = month, y = sales, color = year, linetype = store)) +geom_line() +geom_point() +scale_x_continuous(breaks = 1:12) +labs(title = "Monthly Sales Comparison by Store and Year",x = "Month",y = "Sales",color = "Year",linetype = "Store") +theme_minimal()

最佳实践建议

  1. 保持一致性

    • 在项目中统一使用相同的数据格式
    • 建立清晰的数据处理流程
  2. 命名规范

    • 使用有意义的变量名
    • 保持命名风格的一致性
  3. 数据质量

    • 转换前检查缺失值
    • 验证转换后的数据完整性
  4. 文档记录

    • 记录数据转换的步骤
    • 说明转换的原因和目的

常见问题解决

  1. 处理缺失值
# 使用values_drop_na参数处理缺失值
pivot_longer(..., values_drop_na = TRUE)
  1. 处理多个标识符
# 保持多个ID列不变
pivot_longer(..., id_cols = c("id1", "id2"))
  1. 处理复杂列名
# 使用正则表达式处理列名
pivot_longer(cols = matches("\\d{4}"),  # 匹配年份names_to = "year",values_to = "value"
)

总结

掌握长宽数据格式的转换是数据分析中的重要技能。通过tidyr包提供的工具,我们可以灵活地在不同格式之间转换,从而更好地满足分析和可视化的需求。记住,选择哪种格式主要取决于你的具体需求:

  • 需要创建可视化?使用长格式
  • 需要人工检查数据?使用宽格式
  • 需要进行统计分析?根据具体分析方法选择合适的格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ollama+springboot ai+vue+elementUI整合

1. 下载安装ollama (1) 官网下载地址&#xff1a;https://github.com/ollama/ollama 这里以window版本为主&#xff0c;下载链接为&#xff1a;https://ollama.com/download/OllamaSetup.exe。 安装完毕后&#xff0c;桌面小图标有一个小图标&#xff0c;表示已安装成功&…

基于lighthouse搭建私有网盘Cloudreve【开源应用实践】

基于lighthouse搭建私有网盘Cloudreve【超高性价比】 今天给大家分享一款私人网盘神器&#xff0c;既能存放你的文件文档&#xff0c;也能替你保存那不可告人的秘密~ 香菇今天将手把手教给大家如何在腾讯云轻量应用服务器上搭建个人专属网盘 1. 既爱又恨的网盘存储 很多小伙伴…

JavaScript高级篇 - 浏览器事件详解 DOM事件以及独立封装事件Util和Ajax封装

Dom事件 Model&#xff08;特定领域对象的抽象&#xff09;、Protocal&#xff08;针对数据格式的约定&#xff09; DOM(Document Object Model&#xff0c;文档对象模型)是针对HTML文档和XML文档的一个API。DOM描绘了一个层次化的节点树&#xff0c;允许开发人员添加、移出和…

MinIO 的 S3 over RDMA 计划: 为高速人工智能数据基础设施设定对象存储新标准

随着 AI 和机器学习的需求不断加速&#xff0c;数据中心网络正在迅速发展以跟上步伐。对于许多企业来说&#xff0c;400GbE 甚至 800GbE 正在成为标准选择&#xff0c;因为数据密集型和时间敏感型 AI 工作负载需要高速、低延迟的数据传输。用于大型语言处理、实时分析和计算机视…

git config是做什么的?

git config是做什么的&#xff1f; git config作用配置级别三种配置级别的介绍及使用&#xff0c;配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级&#xff1f; 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…

使用 npm 安装 Yarn

PS E:\WeChat Files\wxid_fipwhzebc1yh22\FileStorage\File\2024-11\spid-admin\spid-admin> yarn install yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后…

常用在汽车PKE无钥匙进入系统的高度集成SOC芯片:CSM2433

CSM2433是一款集成2.4GHz频段发射器、125KHz接收器和8位RISC&#xff08;精简指令集&#xff09;MCU的SOC芯片&#xff0c;用在汽车PKE无钥匙进入系统里。 什么是汽车PKE无钥匙进入系统&#xff1f; 无钥匙进入系统具有无钥匙进入并且启动的功能&#xff0c;英文名称是PKE&…

机器学习基础05

目录 1.随机森林 1.1随机森林的介绍 1.2算法原理 1.3API 2.线性回归 2.1回归的含义 2.2线性回归 2.3损失函数 2.4多参数回归 2.5最小二乘法MSE 2.6API 1.随机森林 集成学习的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类器。 集成…

数据库范式、MySQL 架构、算法与树的深入解析

一、数据库范式 在数据库设计中&#xff0c;范式是一系列规则&#xff0c;用于确保数据的组织和存储具有良好的结构、完整性以及最小化的数据冗余。如果不遵循范式设计&#xff0c;数据可能会以平铺式罗列&#xff0c;仅使用冒号、分号等简单分隔。这种方式存在诸多弊端&#…

SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间

SQL面试题——奔驰SQL面试题 我们的表大致如下 CREATE TABLE signal_log( vin STRING COMMENTvehicle frame id, signal_name STRING COMMENTfunction name, signal_value STRING COMMENT signal value , ts BIGINT COMMENTevent timestamp, dt STRING COMMENTformat yyyy-mm…

Hadoop生态圈框架部署(六)- HBase完全分布式部署

文章目录 前言一、Hbase完全分布式部署&#xff08;手动部署&#xff09;1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.j…

YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构

摘要 视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnCo…

Queuing 表(buffer表)的优化实践 | OceanBase 性能优化实践

案例问题描述 该案例来自一个金融行业客户的问题&#xff1a;他们发现某个应用对一个数据量相对较小的表&#xff08;仅包含数千条记录&#xff09;访问时&#xff0c;频繁遇到性能下降的情况。为解决此问题&#xff0c;客户向我们求助进行分析。我们发现这张表有频繁的批量插…

CentOS 8 安装 chronyd 服务

操作场景 目前原生 CentOS 8 不支持安装 ntp 服务&#xff0c;因此会发生时间不准的问题&#xff0c;需使用 chronyd 来调整时间服务。CentOS 8以及 TencentOS 3.1及以上版本的实例都使用 chronyd 服务实现时钟同步。本文介绍了如何在 CentOS 8 操作系统的腾讯云服务器上安装并…

AI大模型(二):AI编程实践

一、软件安装 1. 安装 Visual Studio Code VSCode官方下载&#xff1a;Visual Studio Code - Code Editing. Redefined 根据自己的电脑系统选择相应的版本下载 安装完成&#xff01; 2. 安装Tongyi Lingma 打开VSCode&#xff0c;点击左侧菜单栏【extensions】&#xff0c;…

Win10/11 安装使用 Neo4j Community Edition

如果你下载的是 Neo4j Community Edition 的压缩包&#xff0c;意味着你需要手动解压并配置 Neo4j。以下是详细的使用步骤&#xff1a; 0. 下载压缩包 访问Neo4j官网&#xff0c;找到 Community Edition 版本并选择 4.x 或者 5.x 下载&#xff1a;https://neo4j.com/deployme…

使用json配置动态区间及动态执行公式

背景 有时候可能线上一直需要调整公式或者区间以及参数等等&#xff0c;如果使用代码方式&#xff0c;将会变得比较麻烦&#xff0c;可以在redis或者数据库配置一份动态配置&#xff0c;让代码进行解析并执行&#xff0c;可以对公式以及参数等进行动态调节 需求 x 是估值&…

腾讯地图GL JS点标识监听:无dragend事件的经纬度获取方案

引入腾讯地图SDK <!--腾讯地图 API--><script charset"utf-8" src"https://map.qq.com/api/gljs?librariestools&v1.exp&key***"></script>构建地图容器 <div class"layui-card"><div class"layui-car…

Tiktok对接和内容发布申请流程

这段时间在搞AI生成视频&#xff0c;希望用户能一键发布到Tiktok&#xff0c;因此研究了一下Tiktok的开发者申请流程&#xff0c;发现好复杂&#xff0c;同时也发现Tiktok的开发也跟我一样&#xff0c;挺草台班子的 0、流程简述 废话不多说&#xff0c;Tiktok的开发者申请和…

企业生产环境-麒麟V10(ARM架构)操作系统部署kafka高可用集群

前言&#xff1a;Apache Kafka是一个分布式流处理平台&#xff0c;由LinkedIn开发并捐赠给Apache软件基金会。它主要用于构建实时数据流管道和流应用。Kafka具有高吞吐量、可扩展性和容错性的特点&#xff0c;适用于处理大量数据。 以下是Kafka的一些核心概念和特性&#xff1…