R tidyverse包结合excel进行数据框的横向、纵向及“键值对”格式转换

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

概念定义

翻看网络上诸多有关进行数据库横纵向转换、或长宽转换的博文,发现大家对于“横向”与“纵向”的数据库的定义并不完全相同,经过学习与摸索,所幸达到了我原本期望的效果。因此将过程与一些简单的思路记录下来。
且由于数据库管理的水平有限,本笔记中所定义的数据框的“横向”、“纵向”以及“键值对”格式,皆为了方便操作而来,不见得严谨。

"横向"结构

在这里插入图片描述
如上图所示,向量order1表示观察样本的序号,在该数据框中,针对每个样本应当有三个变量:实际住院天数、编码、诊断,其中编码与诊断至多观察了4次。
在我所期望的理想的横向数据框中,一条观察记录必然只对应一个样本,意味着向量order1的取值是不能够存在重复值的。针对同一个样本的多项观察应当被写作多条向量、并入数据框中。

“纵向”结构

在这里插入图片描述
如图,针对样本的观察、仅依照观察角度的不同记录为各个向量,一个向量代表着一个观察角度。比如图中,针对order1中给出的样本,一共只有实际住院天数、编码、诊断三个角度、因此除order1本身外,有且仅有这三个向量。而同一角度的多次观察、则体现为样本相同(order1取值相同)的多条记录。

“键值对”结构

在这里插入图片描述
如图,其与我所定义的“纵向”结构数据框最大的区别在于:针对同一个样本的其中两项观察角度——即编码与诊断,本身不再作为两个不同的向量,而是将“观察角度差异”这一概念本身作为一个向量varname1,其取值有二曰“编码、诊断”;而每个样本的每次观察到的编码与诊断的值、则统一压缩到另一个向量value1中。前者为“键”(key)、后者为“值”(value),是为“键值对”。

“纵向”转“横向”

由于工作需要,进行了数据框从“纵向”转“横向”的工作。有趣的是,“键值对”结构在这一过程中充当了“中间状态”。或许是我才疏学浅、未能找到更简便的方法。其过程大致分为两个部分,第一部分从纵向转为键值对、第二部分从键值对转为横向。
首先加载R包

library(tidyverse)
“纵向”转“键值对”

非常简单地用gather()函数
其基本的参数为:
gather(数据框, “键”的向量名, “值”的向量名, -顺势保留的向量1, -顺势保留的向量2…)

  • 注意顺势保留的向量,书写向量名前方需要有一个“-”符号。
    在这里插入图片描述
    以上方数据框为例,将其命名为data1后。
data2 <- gather(data1, varname1, value1, -order1, -实际住院天数)
View(data2)

得到如下所示“键值对”结构的数据框。可以看到“编码”与“诊断”不再是向量名、而变成了“键向量”的取值。
在这里插入图片描述
注意,此时的“键值对”结构数据框尚不能用来直接转换为“横向”结构,否则会报错

Error: Each row of output must be identified by a unique combination of keys.
Keys are shared for …

其原因在于:由于对部分样本存在着多条观察记录的情况,比如71号样本有4次观察记录,但每次记录中观察的“编码”与“诊断”都是命名为这两个取值,也就导致了程序实际上并不能区分71号的这4个“编码”之间的区别,因此在转为横向的时候无法判断其先后顺序、或是否有顺序。

“键值对”转“横向”

在这里插入图片描述
因此需要将该“键值对”格式的数据框转换为如上图所示,为“键向量”的取值赋予一定的顺序。该步骤的转换我是通过excel进行操作的,十分简便、此不赘述。
此时再通过spread()函数进行拆分,将之转换为“横向”结构
其基本参数为:
spread(数据框, 键向量名称, 值向量名称)

spread(data1, varname1, value1)

即可以得到如图所示的“横向”结构数据框
在这里插入图片描述

至于横向格式向纵向格式的转换,若将来有工作涉及到再行补录入本笔记。

Rstudio将excel数据导入并将数据框其中一列转变为字符串或向量 以2020年新冠疫情期间爬取的部分微博热搜内容为例,爬取数据存储在excel表格中,将数据命名为Weibo_2020Coron.xlsx,数据样式如下: 在这里要提示大家:最好将Rstudio文件和数据存储在一个文件夹下便于数据导入!!! library(readxl) library(tidyverse) orders <- read_excel("Weibo_2020Coron.xlsx") %>% #导入数据 select("title") #只保留"titl. 阅读详情

相关推荐

R语言数据重塑:从长宽格式转换到语义建模

数据重塑是数据分析的基础能力,本质是将原始物理存储映射为具备明确语义的逻辑结构。其核心原理在于区分标识变量与测量变量,通过长格式与宽格式的规范转换,支撑分组聚合、时间序列分析、多变量建模等关键任务。在R中,tidyr的pivot_longer和pivot_wider函数取代了传统reshape2,以动词化语法实现可读、可控、可验的数据变换。掌握数据重塑不仅避免cbind/rbind引发的类型坍塌与静默错误,更能确保ggplot绘图、dplyr聚合、lm建模等下游操作稳定可靠。本文聚焦R语言实战场景,详解熔

weixin_30675247的博客 448

code_R语言_纵向数据_

采用R语言编程,解决纵向数据线性混效应模型中的参数估计、等问题

R语言长变宽操作:从数据思维到工业级实践

长变宽(Long to Wide)是数据分析中基础而关键的数据重塑技术,本质是将以观测为行的原始结构,转换为以实体为行、属性为列的分析就绪格式。其核心原理在于明确标识变量(id_vars)、列名来源(names_from)和值来源(values_from)三者构成的数据坐标系。该技术直接支撑回归建模、面板分析、时序对比与BI可视化等高价值场景。在R生态中,pivot_wider与dcast作为主流实现方案,分别代表清晰语义与高性能范式,适用于不同规模与质量的数据工程任务。本文聚焦R语言实战,深入解析参数逻辑

weixin_33796177的博客 306

java 实现两excel(或csv)文件的比对(以某几列作为键值,比对指定列的值差异)

Main为启动类,现在只是将比对差异的内容输出到控制台 搭建项目时,记得将lib文件夹下面的jar添加到classpath中

数据转换:用R语言进行数据操作和转换

本文介绍了在R语言中进行数据操作和转换的一些常用技巧,数据框的选择和过滤、数据框的重塑和变形、变量的创建和修改,以及缺失值的处理。通过使用R的函数和,我们可以灵活地进行各种数据转换操作,为数据分析和建模提供便利。R语言作为一种强大的数据分析工具,提供了丰富的函数和,可以方便地对数据进行各种操作和转换。除了以上介绍的技巧之外,R语言还提供了许多其他的数据转换函数和,如数据排序、合并、拆分等等。通过灵活运用这些函数和,我们可以高效地进行数据操作和转换,为后续的数据分析和建模提供良好的数据基础。

TechPr的博客 567

R中dplyr的select和filter实现横向/竖向选择

当我们平时处理csv等一系列文件时,通常希望只选择其中某几列,或者符合条件的某几行。则可以通过dplyr中的一些函数实现。 library(dplyr) table <- data.frame(cbind(c(1,2,3), c('Li','Zhang','Li'), c(11,13,15)))%>%rename(id = X1, name = X2, score = X3) 假如现在我有这么一个简单的表,第一列是id,第二列是名字,第三列是分数。比如我想只选则名字这一列,则 table%

OldDriver1995的博客 4375

利用R语言纵向数据变成横向数据并给新变量重命名

临床研究中,常用EDC系统收集数据。一般导出的数据都是纵向数据,但纵向数据对于广大的临床医生来说并不友好。往往需要手动把纵向数据变为横向数据才能进行数据分析。不仅费时费力,而且容易出现复制粘贴错误。

zsc943290710的博客 1862

R语言数据分析从入门到实战:基于Tidyverse的完整学习路径

R语言作为专为统计计算和图形显示设计的编程语言,其核心优势在于强大的数据处理能力和无与伦比的可视化系统。其工作原理基于向量化操作和丰富的扩展生态,尤其通过Tidyverse这一现代数据科学工具集,实现了数据操作的连贯性与高效性。这一技术价值在于将数据分析从零散的语法学习,整合为从数据导入、清洗、探索、建模到可视化的标准工作流,极大地提升了分析效率与可重复性。在应用场景上,R语言广泛应用于统计建模、探索性数据分析和专业级数据可视化,尤其适合需要快速进行数据探索和生成统计报告的业务分析、学术研究等领域。本文聚

weixin_34354945的博客 804

r语言提取列名_玩转数据处理120题之P1-P20(R语言tidyverse版本)

前言今天在微信公众号【早起Python】,看到有篇文章叫做【玩转数据处理120题】,最初来自【Pandas进阶修炼120题】,作者刘早起开始是用pandas实现的,后来又加入了中山大学博士陈熹的R语言版本。但是这个R语言版本,代码比较陈旧和啰嗦,甚至是误解(比如R语言处理Excel文件不好之类,mutate与summarise混淆),根本没有体现出如今R语言在有了tidyverse之后,在数据处理...

weixin_39889544的博客 633

R语言实战:从数据清洗到统计建模的完整工作流指南

在数据科学领域,掌握一门专业的统计编程语言对于深入理解数据至关重要。R语言作为专为统计分析和可视化设计的工具,其核心优势在于提供了一套完整的数据思维框架。通过tidyverse生态系统,用户可以构建清晰的数据处理流水线,实现从数据导入、清洗、转换到建模和可视化的无缝衔接。ggplot2基于图形语法理论,能够生成出版级质量的统计图表,极大提升了数据探索和结果呈现的效率。在机器学习应用方面,R提供了丰富的建模和评估工具,支持从线性回归到复杂预测模型的完整分析流程。这些特性使R在学术研究、商业分析和可重复性报告

axfcjwkbi259888707的博客 402

告别Excel手动整理!用R的tidyverse三行代码搞定GSEA分析前的基因数据清洗

本文介绍了如何利用R的tidyverse工具,仅用三行代码高效完成GSEA分析前的基因数据清洗工作,大幅提升生物信息学分析的效率和准确性。通过对比传统Excel手工操作与R自动化处理的优劣,展示了tidyverse在基因名转换、logFC排序和格式转换中的强大功能,帮助研究者告别繁琐的手工操作,实现可重复、高精度的数据分析。

weixin_30699915的博客 331

R语言矩阵转置原理与7种安全实践方案

矩阵转置是线性代数和数据科学中的基础操作,其本质是维度顺序的重排,在R中并非简单数学变换,而是依赖S3泛型机制的对象协议执行。理解`t()`如何根据输入类(如matrix、data.frame、array)分派方法,是避免类型强制、结构崩解和内存溢出的关键。R对数据结构类型边界高度敏感,导致数据框转置易引发字符化、行名丢失等问题;高维数组需用`aperm()`替代`t()`;大规模稀疏矩阵应优先采用`Matrix`实现O(nnz)复杂度转置。这些原理直接支撑统计建模(如`prcomp`预处理)、机器学习特

weixin_34302798的博客 393

dplyr的group_by()函数用于对数据集按照给定变量进行分组

数据预处理是数据科学工作流中的重要环节。通过数据清洗、数据集成、数据变换和数据规约等步骤,可以显著提高数据质量,为后续的分析和建模提供坚实基础。在实际应用中,结合具体数据的特点和分析目标,选择合适的数据预处理方法,可以有效提升模型的准确性和稳定性。dplyr是R语言中一个强大且高效的数据处理,专门设计用于处理数据框(data frames)。它的语法简洁明了,操作高效,尤其适用于大数据集。dplyr提供了一系列函数,使得数据的筛选、变换、聚合和排序等操作变得简单直观。

MD Code 213

医学生自学生信分析:从零到精通的科学学习路径与实战指南

生物信息学分析作为一门交叉学科,其核心在于运用计算工具处理高通量生物数据以解决生物学问题。其基本原理涉及数据获取、质量控制、序列比对、定量分析、差异检验及功能注释等一系列标准化流程。掌握这项技术对于现代医学研究具有重要价值,能够帮助研究者从基因组、转录组等多组学数据中挖掘疾病标志物、探索发病机制。在实际应用场景中,例如疾病分子分型、药物靶点发现和预后模型构建等领域,生信分析已成为关键支撑技术。本文聚焦于为医学生设计一条高效的学习路径,特别强调建立分析思维框架优先于工具学习,并系统介绍了从Linux基础、R语

weixin_33919950的博客 339

R语言data.frame本质解析:列表结构、反直觉行为与15个实战避坑方案

data.frame是R语言中最核心也最易误用的数据结构,其本质并非二维表格,而是一个受长度约束的列表(list),每列是同长原子向量。这种‘列表外壳+向量内核’的设计,导致索引(如[,]、$、[[]])、子集提取、类型转换(如stringsAsFactors)、空数据框初始化等行为严重偏离直觉。理解其底层机制,是避免NA传播、因子水平残留、drop=TRUE意外降维、rbind列名错配等高频问题的前提。本文聚焦R数据处理工程实践,覆盖从创建、访问、修改到宽长转换、排序合并的完整链路,特别强化data.fr

weixin_33853827的博客 576

医学生零基础到实战:2026生信分析高效学习路径与核心技能

生物信息学分析作为连接生物学、医学与计算机科学的关键交叉领域,其核心在于通过计算工具解析高通量生物数据以揭示生命规律。从原理层面看,生信分析依赖于稳定的计算环境、可重复的代码流程以及标准化的数据处理方法,这决定了其技术价值不仅在于实现具体分析任务,更在于构建系统化、可复现的科研工作流。在应用场景上,无论是基因表达差异分析、变异检测还是多组学整合,都离不开Linux命令行操作、R/Python编程以及公共数据库(如GEO、TCGA)的使用。本文聚焦于为医学生设计一条从零开始、循序渐进的学习路径,特别强调**学

weixin_30843605的博客 327

使用R的函数安装和查看扩展

在R中,可以使用函数来安装和管理。要第一次安装一个,可以使用 install.packages() 函数(注意括号内需要用英文字符的双引号 " ")。例如,要安装 ggpubr 扩展,只需输入以下代码:

MD Code 219

tidyverse 常见错误处理

1) spread() Error: Each row of output must be identified by a unique combination of keys. 遇到上述错误的时候,原因是错误的指定了参数。spread()函数有三个主要参数,key,value,fill key指的是变成宽数据之后的成为列名的列 value指的是填充的列 fill指的是当value没有填...

Zheng的博客 4995

Excel文件操作-Excel文件key值比对,输出修改内容

excel文件key值文件比对,输出新增、修改、修改内容

weixin_47536499的博客 696
上一篇: R 笨方法删除重复值 -- 但凡重复就删除,第一行也不例外
下一篇: R包安装版本不对的问题
9233333333
博客等级 码龄8年 690粉丝 6原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值