R tidyverse包结合excel进行数据框的横向、纵向及“键值对”格式转换
概念定义
翻看网络上诸多有关进行数据库横纵向转换、或长宽转换的博文,发现大家对于“横向”与“纵向”的数据库的定义并不完全相同,经过学习与摸索,所幸达到了我原本期望的效果。因此将过程与一些简单的思路记录下来。
且由于数据库管理的水平有限,本笔记中所定义的数据框的“横向”、“纵向”以及“键值对”格式,皆为了方便操作而来,不见得严谨。
"横向"结构
如上图所示,向量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进行数据框的横向、纵向及“键值对”格式转换相关推荐
- 求问R语言 分层抽样 合并两个数据框为什么出现了空集
求问R语言 分层抽样 合并两个数据框为什么出现了空集 rbind计算不了 #分层抽样 mydata <- read.csv("dat.csv") #simsample 简单随 ...
- 【R语言】按照列名筛选数据框
[R语言]按照列名筛选数据框 先定义一个简单的数据框 a<-c("a","b","c","d") b<-c( ...
- 如何在熊猫数据框的列中将所有NaN值替换为零
本文翻译自:How can I replace all the NaN values with Zero's in a column of a pandas dataframe I have a da ...
- r语言用行名称提取数据框信息显示na_学会这些R语言技巧至少可以节省半年时间...
ubuntu备忘定期清空回收站 扩增子数据牢记 r ubuntu 相关技巧和备忘待解决问题1:phyloseq有一篇文章案例使用输入和输出文件相同的文件名,无法执行 待解决问题2: 待解决问题3:样品 ...
- R实现一次性合并多个数据框
数据处理中经常会有这样的情况,需要合并多个数据(按行或者按列合并),常规的merge或者rbind只能两个两个合并,操作繁琐.可以使用自写函数或do.call()函数进行数据库的拼接或合并,具体操作如 ...
- r语言用行名称提取数据框信息显示na_R语言-05数据框创建,以及按条件取数据框数据...
创建数据框 数据框是R语言的一种基础数据格式,通常excel等表格形式数据读入后都是数据框格式. 下例创建了一个3列5行的数据框,列的名字分别是site.season.pH my.dataset si ...
- R语言的四种数据结构---数据框
数据框是最常见的数据结构,一般来讲,从csv或txt文件读入时就会自动存储为数据框对象. 与矩阵不同的是,矩阵只可以存储一种数据类型,而数据框可以存储多种类型,但是每一列必须为相同的数据类型 1.创建 ...
- R语言入门(21)-数据框的数据处理以及数学计算
一.数据框的转置 使用t()转置 mtcars2 <- t(mtcars) 二.数据框的排序调整 1.按某一单个变量进行排序 利用rev()实现向量原排序的逆转,但是rev只能对向量使用,所以必 ...
- python数据框元素的性质_python-如何在熊猫数据框中设置某个字段的值?
可以说我有一个像这样的熊猫数据框: d = {'col1': [1,2,3,4],'col2': ['','','']} df = pd.DataFrame(data=d) 出于某种原因,我必须遍历其 ...
最新文章
- 北大「最优化:建模、算法与理论」新书, 附579页电子版与课件
- Maven 的dependency 的 classifier的作用
- python 打开 pip_python pip
- java form 上传文件_JAVA入门[16]-form表单,上传文件
- win7讲述人修复_揭秘:干掉了win7!为何win10屡被吐槽它却“永世留芳”
- LindDotNetCore~职责链模式的应用
- Math.round(),Math.ceil(),Math.floor()的区别
- docker镜像与容器的区别
- indesign自学教程,如何保存文档?
- PPT达人速成记 WPS三步打造演示母版
- vs2003 下载地址
- 【解决方案 六】---在VS2015里使用ILDasm
- 第八章 Python之常用模块
- java 文字生成图片(图片添加文字)
- 微信小程序如何获取token
- Android 6.0/7.0权限
- 一套Java架构开发的电商系统要多少钱
- 关于unity场景切换后模型变黑问题
- 用友NC65产品的对账节点联查业务帐
- win10下如何为jdk配置环境变量