因为之前总是在处理表格数据时不熟悉操作,浪费很多时间。所以就抽出时间做了一个学习笔记,内容基本涵盖目前处理任务所需要的功能,后期如果还是遇到什么问题会继续更新学习笔记。
先上一下我们的示例数据:
library(dplyr)
>gset = eset2[1:4,1:4] %>% as.data.frame()
>gset
GSM387788 GSM387789 GSM387790 GSM387791
DDR1 2846.2456 4195.5971 6127.7787 2011.1505
RFC2 214.0745 750.9918 293.8308 705.4816
HSPA6 174.6565 243.5546 367.7806 264.7895
PAX8 285.2702 112.8286 365.4212 218.1675一、创建
这里的创建是很基本的操作,但为了完整我仍是处理一下。
>cluster = data.frame(cluster = c(1,2,3),species = c("human","mice","bee"))
cluster species
1 1 human
2 2 mice
3 3 bee这个在后面会用到,先暂时跳过。
二、增加列/行
> #增加一列
> gene_id = c("WNT","SDE-1","SQE","HAHD")
> gset = cbind(gset,gene_id)
> gset
GSM387788 GSM387789 GSM387790 GSM387791 gene_id
DDR1 2846.2456 4195.5971 6127.7787 2011.1505 WNT
RFC2 214.0745 750.9918 293.8308 705.4816 SDE-1
HSPA6 174.6565 243.5546 367.7806 264.7895 SQE
PAX8 285.2702 112.8286 365.4212 218.1675 HAHD
> #增加一行
> gset = rbind(gset,gene_id)
GSM387788 GSM387789 GSM387790 GSM387791 gene_id
DDR1 2846.245575 4195.5971 6127.778675 2011.15045 WNT
RFC2 214.07445 750.99185 293.8308 705.48165 SDE-1
HSPA6 174.6565 243.5546 367.78055 264.7895 SQE
PAX8 285.2702 112.8285875 365.4211625 218.1675375 HAHD
5 WNT SDE-1 SQE HAHD WNT
> #修改行名
> rownames(gset)[5] = "HSH" #而非rownames(gset[5,]) = "HSH"
GSM387788 GSM387789 GSM387790 GSM387791 gene_id
DDR1 2846.245575 4195.5971 6127.778675 2011.15045 WNT
RFC2 214.07445 750.99185 293.8308 705.48165 SDE-1
HSPA6 174.6565 243.5546 367.78055 264.7895 SQE
PAX8 285.2702 112.8285875 365.4211625 218.1675375 HAHD
HSH WNT SDE-1 SQE HAHD WNT
> #修改指定行名(其他方法)
> ###错误
> rownames(gset)["DDR1"] = "DDR"
Error in `.rowNamesDF<-`(x, value = value) : 'row.names'的长度不对
> ###正确
> a = grep("DDR1",rownames(gset))
> rownames(gset)[a] = "DDR"
> #修改列名(同修改行名),但可以用dplyr函数
> dplyr::rename(gset,ID = gene_id)
GSM387788 GSM387789 GSM387790 GSM387791 ID count
DDR 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.7718
RFC2 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.3787
HSPA6 174.6565 243.5546 367.7806 264.7895 SQE 1050.7811
PAX8 285.2702 112.8286 365.4212 218.1675 HAHD 981.6875dplyr包内的mutate()函数
若要增加新的一列,是有很多方法的,除了上述代码块内的基本方法,
还可以使用gset$gene_id = c() 的方法,这里讲一种我之前不知道的mutate()
#使用dplyr中的mutate()
>gset = mutate(gset,count = GSM387788+GSM387789+GSM387790+GSM387791)
GSM387788 GSM387789 GSM387790 GSM387791 gene_id count
DDR1 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.7718
RFC2 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.3787
HSPA6 174.6565 243.5546 367.7806 264.7895 SQE 1050.7811
PAX8 285.2702 112.8286 365.4212 218.1675 HAHD 981.6875
#这里其实应该有不用全部列名都打出来才能求和的方法,暂时没想到,先这样三、删除
这个很普通了:gset = gset[-5,]
意思是删除第五行。
四、重复、排序和整理(order)
> #重复————————replicate()
> replicated = gset[rep(1:2,each = 2),] #最好是用来复制多行数据,因为他会替换
> replicated
GSM387788 GSM387789 GSM387790 GSM387791 gene_id count
DDR 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.772
DDR.1 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.772
RFC2 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.379
RFC2.1 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.379
> double = gset[c(1:3,1:4),] #用于指定重复,下为原理
> #> c(1:3,1:4)
> # [1] 1 2 3 1 2 3 4
> double = double[order(rownames(double)),] #可以使用order()使复制的行并排
> double
GSM387788 GSM387789 GSM387790 GSM387791 gene_id count
DDR 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.7718
DDR.1 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.7718
HSPA6 174.6565 243.5546 367.7806 264.7895 SQE 1050.7811
HSPA6.1 174.6565 243.5546 367.7806 264.7895 SQE 1050.7811
PAX8 285.2702 112.8286 365.4212 218.1675 HAHD 981.6875
RFC2 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.3787
RFC2.1 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.3787
> #去重——去除重复的行——————distinct()
> distinct(double)
GSM387788 GSM387789 GSM387790 GSM387791 gene_id count
DDR 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.7718
HSPA6 174.6565 243.5546 367.7806 264.7895 SQE 1050.7811
PAX8 285.2702 112.8286 365.4212 218.1675 HAHD 981.6875
RFC2 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.3787
>排序则使用arrange():
arrange(.data,...) 省略号的意思是以何为排序。若选择多个向量,则有先后顺序之分。若要倒序用arrange(gset,desc(count))
五、分组,有点像归类之意
group_by():以什么分组
summarise():总结
filter():筛选出你所分组、且符合你所要求条件的完整数据(注:filter内是用"==",因为是要等价赋值的,并不是给一个向量)
三者多合用
> #分组
> gset_1 = gset #单独列出个dataframe,不要随便在测试集上操作
> gset_1$cluster = c(1,2,1,3) #添加一列分类信息
> #group_by and summarise
> gset_1 %>% group_by(cluster) %>% summarise(max = max(count))
# A tibble: 3 x 2
cluster max
<dbl> <dbl>
1 1 15181.
2 2 1964.
3 3 982.
> #group_by und filter
> gset_1 %>% group_by(cluster) %>% filter(count == max(count))
# A tibble: 3 x 7
# Groups: cluster [3]
GSM387788 GSM387789 GSM387790 GSM387791 gene_id count cluster
<dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
1 2846. 4196. 6128. 2011. WNT 15181. 1
2 214. 751. 294. 705. SDE-1 1964. 2
3 285. 113. 365. 218. HAHD 982. 3六、dplyr包内其他函数的使用
这里只讲一个left_join(),因为经常有需要交集合并列表的情况,inner_join()也常用
>cluster = data.frame(cluster = c(1,2,3),species = c("human","mice","bee"))
#还记得这个创建表格么,这就是我在后面用来测试用的
> cluster
cluster species
1 1 human
2 2 mice
3 3 bee
#研究left_join效果
>left_join(cluster,gset_1,by = "cluster")
cluster species GSM387788 GSM387789 GSM387790 GSM387791 gene_id count
1 1 human 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.7718
2 1 human 174.6565 243.5546 367.7806 264.7895 SQE 1050.7811
3 2 mice 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.3787
4 3 bee 285.2702 112.8286 365.4212 218.1675 HAHD 981.6875
>left_join(gset_1,cluster,by = "cluster") #结论:并无区别,只是谁在左谁在右
GSM387788 GSM387789 GSM387790 GSM387791 gene_id count cluster species
1 2846.2456 4195.5971 6127.7787 2011.1505 WNT 15180.7718 1 human
2 214.0745 750.9918 293.8308 705.4816 SDE-1 1964.3787 2 mice
3 174.6565 243.5546 367.7806 264.7895 SQE 1050.7811 1 human
4 285.2702 112.8286 365.4212 218.1675 HAHD 981.6875 3 bee以上,这就是2021/12/13日的学习笔记,很浅的总结了一下dataframe的基本操作。因为之前长时间不上机就会忘记,于是乎打算在博客上记录笔记,以便随时查阅。这都是很简单的操作。我认真的!公布这篇文章时我还怕有专业人士取笑,但后来想想没关系:这都是学习的过程。看到别人很努力的学习打排球却不免笨拙生手的时候,我也没有嘲笑,反而是觉得他很努力。谁会嘲笑一个努力的人呢?
但其实我很多也是观看别人博客学习的,代码就是个学习和模仿最终熟能生巧的过程。为了防止从入门到劝退,产出点实质性笔记是很好的正反馈。大家加油吧!
当然了博客不是常常更新,我还是要多以自己为重,这样才能学到东西吧!
















