概念定义

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

"横向"结构


如上图所示,向量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)

即可以得到如图所示的“横向”结构数据框

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

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

  1. 求问R语言 分层抽样 合并两个数据框为什么出现了空集

    求问R语言 分层抽样 合并两个数据框为什么出现了空集 rbind计算不了 #分层抽样 mydata <- read.csv("dat.csv") #simsample 简单随 ...

  2. 【R语言】按照列名筛选数据框

    [R语言]按照列名筛选数据框 先定义一个简单的数据框 a<-c("a","b","c","d") b<-c( ...

  3. 如何在熊猫数据框的列中将所有NaN值替换为零

    本文翻译自:How can I replace all the NaN values with Zero's in a column of a pandas dataframe I have a da ...

  4. r语言用行名称提取数据框信息显示na_学会这些R语言技巧至少可以节省半年时间...

    ubuntu备忘定期清空回收站 扩增子数据牢记 r ubuntu 相关技巧和备忘待解决问题1:phyloseq有一篇文章案例使用输入和输出文件相同的文件名,无法执行 待解决问题2: 待解决问题3:样品 ...

  5. R实现一次性合并多个数据框

    数据处理中经常会有这样的情况,需要合并多个数据(按行或者按列合并),常规的merge或者rbind只能两个两个合并,操作繁琐.可以使用自写函数或do.call()函数进行数据库的拼接或合并,具体操作如 ...

  6. r语言用行名称提取数据框信息显示na_R语言-05数据框创建,以及按条件取数据框数据...

    创建数据框 数据框是R语言的一种基础数据格式,通常excel等表格形式数据读入后都是数据框格式. 下例创建了一个3列5行的数据框,列的名字分别是site.season.pH my.dataset si ...

  7. R语言的四种数据结构---数据框

    数据框是最常见的数据结构,一般来讲,从csv或txt文件读入时就会自动存储为数据框对象. 与矩阵不同的是,矩阵只可以存储一种数据类型,而数据框可以存储多种类型,但是每一列必须为相同的数据类型 1.创建 ...

  8. R语言入门(21)-数据框的数据处理以及数学计算

    一.数据框的转置 使用t()转置 mtcars2 <- t(mtcars) 二.数据框的排序调整 1.按某一单个变量进行排序 利用rev()实现向量原排序的逆转,但是rev只能对向量使用,所以必 ...

  9. python数据框元素的性质_python-如何在熊猫数据框中设置某个字段的值?

    可以说我有一个像这样的熊猫数据框: d = {'col1': [1,2,3,4],'col2': ['','','']} df = pd.DataFrame(data=d) 出于某种原因,我必须遍历其 ...

最新文章

  1. 北大「最优化:建模、算法与理论」新书, 附579页电子版与课件
  2. Maven 的dependency 的 classifier的作用
  3. python 打开 pip_python pip
  4. java form 上传文件_JAVA入门[16]-form表单,上传文件
  5. win7讲述人修复_揭秘:干掉了win7!为何win10屡被吐槽它却“永世留芳”
  6. LindDotNetCore~职责链模式的应用
  7. Math.round(),Math.ceil(),Math.floor()的区别
  8. docker镜像与容器的区别
  9. indesign自学教程,如何保存文档?
  10. PPT达人速成记 WPS三步打造演示母版
  11. vs2003 下载地址
  12. 【解决方案 六】---在VS2015里使用ILDasm
  13. 第八章 Python之常用模块
  14. java 文字生成图片(图片添加文字)
  15. 微信小程序如何获取token
  16. Android 6.0/7.0权限
  17. 一套Java架构开发的电商系统要多少钱
  18. 关于unity场景切换后模型变黑问题
  19. 用友NC65产品的对账节点联查业务帐
  20. win10下如何为jdk配置环境变量

热门文章

  1. PTA L1-069 胎压监测(15分)
  2. 怎样用电脑将视频中的音乐提取出来
  3. 轻巧的编辑器:Sublime Text3 user设置
  4. 万圣节 数据_将万圣节特效带入WordPress网站的7种方法
  5. 面试 腾讯 阿里 百度
  6. 访问局域网计算机 界面闪退,魔兽争霸局域网总是秒退怎么办
  7. 天河二号计算机与量子计算机,“天河二号”算出量子霸权标准
  8. 网上免费索取杂志-大全
  9. web前端黑客技术揭秘(5)
  10. 提取股票名称代码对照表