滴滴滴,第六天打卡~~~~
准备工作:
part1:学会获取一个R包的小抄
方法1:百度/谷歌
方法2:找Rstudio的cheatsheet网站
https://www.rstudio.com/resources/cheatsheets/
方法3: 生信星球公众号(教程用的包)
part2:初步了解tidyr包
- 它的功能主要有:
(1)数据框的变形
(2)处理数据框中的空值
(3)根据一个表格衍生出其他表格
(4)实现行或列的分割和合并
这个包是把要用的数据处理成标准而统一的数据框:Tidy Data
part3:学习极简安装R包:
1.命令:library(tidyr)
,如果没有安装这个包,会报错,进行下一步;
2.下载和安装tydir,命令:install.packages("tidyr")
(默认安装到工作目录里,若是报错,打不开连接,可以换个镜像试试)
part4:关于数据框
1.新建数据框,命令:
a<-data.frame(GeneId = rep("gene5",times=3),SampleName =paste("Sample",1:3,sep=""),Expression=c(14,19,18))
新建一个数据框并赋值给a,括号里是“列名”=列值,注意,这里列名要加双引号。
rep,表示重复,括号中填要重复的字符和重复次数。
paste,连接两个字符串,括号要填这两个字符串并指定分隔符(sep),没有分隔符就填sep=""。
字符串需要加双引号。
-
key-value
“键值对” ,表示一种对应关系。“键”和“值”都是列名,如 SampleName 和 Expression 。 - 函数后面一般都要加括号,括号里第一个参数是数据框名。
- 字符串要加双引号(行名和列名也是字符串,但是可以不用加)。
part5:认识Tidy Data
一种组织表格数据的方式,提供了一种能够跨包使用的“统一”的数据格式:
每个变量(variable)占一列,每个情况(case)和观测值(observation)占一行。
终于进入正题:
1.Reshape Data
gather:将数据框转换为Tidy Data;
spread:让tidy data一夜回到解放前。哈哈哈~~~
-
将示例数据下载或者复制粘贴成table4a;
a<- gather(table4a,
1999,
2000,key="year",value="cases")
或者,需合并的列名也可以列在最后:
-
b <- gather(table4a,"year","cases",
1999,
2000)
gather括号里的分别是:
数据框名,需合并的列名(两个),合并后的key列名,value列名。 - 如果合并前的列名比较多,可以用排除法来偷懒:
gather(a,year,cases,-country)
# -country的意思就是合并除country外剩下的列。
2.Handle Missing Values
处理丢失的数据,即某些单元格有空值的情况。
三种处理方式:
(1) 删除整行
(2) 根据上下文(瞎)蒙一个
(3) 同一列的空值填上同一个数。
NA表示空值,所以新建的时候空着就好。
- 获得图示数据框X
X<-read.csv('doudou.txt')
默认参数:默认分隔符是“,”,导出时也不会默认加引号,并且转换txt也不会变乱码!
如果用read.table,默认参数很笨哦,
这花花老师发现的嘞,厉害厉害~~~~
- csv的导入和导出方式:
导入:X<-read.csv('doudou.csv')
导出:write.csv(X,'doudou.csv') -
drop_na():有空值的,整行删除;
括号里填数据框名,有空值那一列的列名;
例如:drop_na(X,X2)
- fill(),同一列的空值填上同一个数;
例如:fill(X,X2)
# 根据上一行的值填充 - replace_na(),空值填进去特定的一个数值,括号里填数据框名,要填的列名=要填的值;
例如:replace_na(X,list(X2=2))
3. Expand Tables
-
complete(把空值的位置补全)
例如:complete(X,nesting(x1),fill=list(x2=5))
# 把刚才的空值补上5;
expand
(列出每列值所有可能的组合--根据下面的示例来理解这句话)
示例:
data_eg1<-data.frame(GeneId = rep("gene5",times=3),SampleName =paste("Sample",1:3,sep=""),Expression=c(14,19,18))
expand(data_eg1,GeneId,SampleName,Expression)
4.split cells
(把一列拆成两列。目测原列必须要有分隔符才行啊好像。)
原数据:
-
separate:按列分割
table_sep <- separate(table3,rate,into=c("cases","pop"))
-
separate_rows:按行分割
separate_rows(table3,rate)
-
unite:分割完了再合并回去
unite(table_sep,cases,pop,col="rate",sep="/")