顶尖研究者每天都在用!如何拼接数据集?送你超级实用的四招!

学术   教育   2024-03-29 12:11   浙江  

处于大数据时代,不会数据拼接就要gg了!


数据库不会老老实实的将一切都准备好等您来享用。大部分数据是零散的,甚至是乱糟糟的!因此,数据拼接是一个必备技能!


手动拼接?样本量小的时候还可以,也就眼睛受点苦。有时候,不但眼睛受了苦,数据的拼接工作也同样搞砸


如果样本量达几千几万几亿的话,那就变得相当困难了。一旦上下行串,后果将会是毁灭性的!


小编今天就来解决这个问题!将用到{dplyr}中的拼接函数 *_join(),以及基础R的函数merge()


速速进入操作部分~


#安装和载入
install.packages("dplyr")
library(dplyr)


创建两个数据(包含共同变量:id)用于后续数据拼接,为了让演示能简单明了,我们所创建的示范数据是极其简单的。


# 创建第一个数据
mydata_1 <- tibble(id = c(1, 2, 3),
                   var1 = c("A1", "B1", "C1"))
mydata_1


# 创建第二个数据
mydata_2 <- tibble(id = c(1, 2, 4),
                   var2 = c("A2", "B2", "C2"))
mydata_2


接下来,根据不同的拼接目的介绍四个*_join()函数和merge()的用法。


首先,介绍第一个函数inner_join()将两个数据集根据共同变量id拼起来,代码如下:


mydata_in <- inner_join(mydata_1, mydata_2, by = "id")
mydata_in



上述代码将保留两个数据集(mydata_1和mydata_2)中id相同的行,并拼在一起。


看下图更加容易理解:



一图胜过千言万语!


此外,如果是使用merge()


mydata_in1 <- merge(mydata_1, mydata_2, by = "id")
mydata_in1



第二个函数left_join(),代码如下:

mydata_left <- left_join(mydata_1, mydata_2, by = "id")
mydata_left



left_join()顾名思义,以代码中在左边的数据(mydata_1)为准进行两个数据集的拼接,保留mydata_1中所有行,即id为1, 2, 3的样本。在mydata_2中,没有对应的id则以NA(缺失值)的形式标记。见下图:



使用merge()函数也可以达到同样目的,代码如下:

mydata_left1 <- merge(mydata_1, mydata_2, by = "id", all.x = TRUE)
mydata_left1


上述代码:all.x = TRUE中x代表第一个数据集,即保留第一个数据集(mydata_1)中的全部行,即id为1, 2, 3。


第三个函数:right_join(),代码如下:


mydata_right <- right_join(mydata_1, mydata_2, by = "id")
mydata_right



上述right_join(),即是以右边的数据(mydata_2)为准来拼接数据,保留它的所有id(1, 2, 4)。见下图:


使用merge()拼接数据:


mydata_right1 <-merge(mydata_1, mydata_2, by = "id", all.y = TRUE)
mydata_right1



上述代码:all.y = TRUE中y代表第二个数据集,即保留第二个数据集(mydata_2)中的全部id(1, 2, 4)。


第四个函数full_join(),代码如下:


mydata_full <- full_join(mydata_1, mydata_2, by = "id")
mydata_full



上述full_join()将保留两个数据集中所有行,即id为1, 2, 3, 4。如下图:



如果使用merge(),可以这么做:


mydata_full1 <- merge(mydata_1, mydata_2, by = "id", all = TRUE)
mydata_full1



上述代码:all = TRUE,即拼接两个数据集时要保留它们的全部行,即id为1, 2, 3, 4。


最后为了大家方便对照,小编做了下方表格给各位参考:


  

示意图加上表格,一整个清晰明了


好啦,今天的内容就到这里。如果有帮助,记得分享给需要的人


公众号的线上课程

1. 《R语言和统计新手课程》

2. 《回归:从入门到进阶》

【通过公众号菜单栏--线上课程--新手课程/回归课程】


统计咨询

《服务介绍和经典合作案例》


公众号核心成员的成果发表

《SCI医学1区影响因子9分论文》


公众号核心成员担任SCI杂志Associate Editor!
《JAD杂志Associate editor》
《Frontiers in Neuroscience, Frontiers in Neurology and Frontiers in Psychiatry杂志的神经退行性病变板块》


▌本文由R语言和统计首发
▌课程相关咨询可添加R师妹微信: kefu_rstats
▌编辑:June
▌邮箱:contact@rstats.cn
▌网站:www.rstats.cn
我们致力于让R语言和统计变得简单!



R语言和统计
我们定期更新与R有关的内容,比如R编程基础,作图,实用R包的解读,统计学基础知识,前沿的统计方法,机器学习等等。
 最新文章