之前录制过一期视频介绍过这个内容,他的基本需求就是:他有5份数据集,每一份数据集都是每行是一个基因,每列是一个样本,值是对应这个基因的表达量。他想将5个数据集中的共有基因找出来,然后5个数据集按共有的基因合并。
我的思路是
- 先把5份数据的基因名取交集
- 用基因名给每份数据做行名
- 根据取交集的结果来提取数据
- 最后合并数据集
那期内容有人留言了简便方法,很短的代码就实现了这个目的。我将代码记录在这篇推文里
因为5份数据集以csv格式存储,首先就是获得存储路径下所有的csv格式文件的文件名,用到的命令是
files<-dir(path = "example_data/merge_data/",
full.names = T,
pattern = ".csv")
用到的函数是dir()
path
参数是数据文件存储的路径
full.names
参数如果设置为TRUE,则返回文件的完整路径,如果设置的为FALSE则只返回文件名。
相对路径和绝对路径是很重要的概念,这个一定要搞明白
pattern
参数指定文件的后缀名
接下来批量将5份数据读入
需要借助tidyverse
这个包,用到的是map()
函数
library(tidyverse)
df<-map(files,read.csv)
class(df)
df
是一个列表,5份数据分别以数据框的格式存储在其中
最后是合并数据
直接一行命令搞定
df1<-reduce(df,inner_join)
df1就是我们想要的结果
达成这个目的最终总共才用到了4行代码,太方便了。
之前和一位同学讨论的时候他也提到了tidyverse整理数据,但是自己平时用到的数据格式还算整齐,基本上用数据框的一些基本操作就可以达到目的了。也就没有学tidyverse这个包的内容,看来得抽时间好好学习一下了。
欢迎大家关注我的公众号
小明的数据分析笔记本