首页 > 科研教程 > 30天学会R DAY8:数据合并及变量更改
2022
06-04

30天学会R DAY8:数据合并及变量更改

在数据进行前期处理中经常会涉及到数据集的合并,变量名、变量属性的更改及变量的排序,这一章就这四个方面给大家做一下简单介绍。

开始之前,我们先读入elder1、elder2这两个文件

elder1<-read.csv("elder1.csv")

elder2<-read.csv("elder2.csv")

一、数据集合并

rbind(数据集1,数据集2) 添加行,增加样本量,将两个数据样本量叠加

cbind(数据集1,数据集2) 添加列,增加变量,将两个数据变量叠加

merge(数据集1,数据集2,by=”变量”,all=逻辑值) by=”变量” 按“变量”进行合并;all=默认值False 两个数据集“串联”,TRUE两个数据集“并联”

方法一 rbind(数据集1,数据集2) 追加样本量,前提是两个数据库的变量名需相同。为了方便演示,将elder1数据样本量一分为二成t1,t2两个数据集。

t1<-elder1[elder1$SBP>=140,] #提取SBP>=140的样本

t2<- elder1[elder1$SBP<140,] #提取SBP<140的样本

t3<-rbind(t1,t2)

dim(t3)

[1] 5846 12 t3和elder1 数据值相同

方法二 cbind(数据集1,数据集2) 添加列,前提是要求行数相同,而且两个数据集的行数所指的观察单位需对应,不然合交后的数据容易出现一行是两个人的数据。

在数据集横向追加中不建议使用。为了方便演示,将elder1数据样本量一分为二成t4,t5两个数据集。

t4<-elder1[,-c(2,3)] #数据集包含除2,3列以外的变量

t5<-elder1[,c(2,3)] #数据集只包含2,3列以外的变量

t6<-cbind(t4,t5)

dim(t6)

[1] 5846 12 t6和elder1 数据值相同

方法三 merge(数据集1,数据集2,by=”变量”,all=逻辑值) 合并两个变量名,建议使用merge语句; all函数决定合并的方式

t7<-merge(elder1,elder2,by="ID",all =TRUE) #两个数据库的ID“串联”

dim(t7)

[1] 5850 31 并联,行数增加

将两个数据按ID都进行合并

t8<-merge(elder1,elder2,by="ID",all =FALSE) #两个数据库都有的ID“串联”

dim(t8)

[1] 4031 31 串联 行数减少

只合并两个数据集都有的ID

二、变量名重命名

names(数据集)[列数]<-“新变量名” 对一个变量名进行修改

rename(数值集,c(旧变量名="新变量名")) 可更改多个变量名

fix(数据集) 窗口界面操作

方法一 names(数据集)[列数]<-“新变量名” 只适合于对一个变量名进行修改,还需要知道要修改的变量列数,比较麻烦,不常用。

names(elder1)[2]<-"SBP1" #[]第几列的变量名进行修改

names(elder1)

[1] "ID" "SBP1" "DBP" 第二列变量名改成SBP1

方法二 rename(数值集,c(旧变量名="新变量名")) 可对多个变量进行同时修改

library(reshape)

t1<-rename(elder1,c(SBP="SBP1")) #将变量名修改,SDP原变量,”SDP1”新变量。

names(t1)

[1] "ID" "SBP1" "DBP" 将SBP变量名更改成SBP1

t2<-rename(elder1,c(SBP="SBP1",DBP="DBP1")) #将两个变量名进行修改

names(t2)

[1] "ID" "SBP1" "DBP1" "TC" 将SBP,DBP变量名更改成SBP1,DBP1

方法三 fix(数据集) 最简单,窗口界面操作,适合新手修改变量名,缺点在于结果修改不可逆转

fix(elder1) #窗口直接修改

三、变量属性的更改

数据集$变量<-as.factor(数据集$变量) 转化成因子

数据集$变量<-as.character(数据集$变量) 转化成字符型

数据集$变量<-as. numeric (数据集$变量) 转化成数值

fix(数据集) 窗口界面操作

方法一 数据集$变量<-as.函数(数据集$变量) 函数可以是factor,character,numeric等所要转化的数据类型;前后变量可相同,也可不同,若前后变量相同,在原变量上更改;前后变量不同,生成一个新变量

elder2$sex1<-as.factor(elder2$sex) #将elder2里的sex变量属性改成因子,并生成一个新变量sex1

elder2$sex1<-as.numeric(elder2$sex1) #将sex1变量属性改成数值

方法二fix(数据集) 和改变量名一样,缺点在于改后没有记录

fix(elder2)

四、数据集排序

sort(数据集$变量,decrease=逻辑符,na.last=逻辑符) 将某个变量进行排序,decrease默认FALSE 从低到高排序,TRUE 从高到低排序;na.last默认值FALSE 缺失值在最前面,TRUE缺失值在最后

数据集[order(数据集$变量),] order默认返回是升序,order(-)降序

方法一 sort(数据集$变量,decrease=逻辑符,na.last=逻辑符) 返回变量排序结果,只对这一个变量进行排序,表格不受影响。

sort(elder1$SBP) #SBP变量从低到高排序

sort(elder1$SBP,decreasing = TRUE) #SBP变量从高到低排序

sort(elder1$SBP,na.last = TRUE) #缺失值在最后

方法二 数据集[order(数据集$变量),] order将“行位置”按变量的升序排列,对数据集整体进行排序,表格发生改变。

order(elder1$SBP) #按变量值升序,返回变量值所在 “行位置”,

t8<-elder1[order(elder1$SBP),] # 数据库中进行排序,从低到高

t9<-elder1[order(-elder1$SBP),] # 数据库中进行排序,从高到低

DAY8的内容就介绍到这里!

本章提到的数据集elder1,elder2,请点击“阅读原文”至百度网盘下载。

最后,一个月就能学会R语言,你敢挑战一下吗?


转自:医学论文与统计分析

最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情