生信起步第六站-R大哥的“魔法”技能。
之前一直很“怨恨”R包,主要因为各种安装可能会遇到各种麻烦,但不可否认的是,正是因为这些“麻烦”,才让我发现R大哥是个很有内涵的家伙,技能很多嘛。今天,他将变身“巴啦啦大魔哥”🧚♂️,打开他的一个包裹,给我们展示的就是“如何对数据施魔法”。
Tydir包裹准备
一、获得包裹
(一) 获取包裹小抄(生信星球tidyr)
(二) 安装包裹-极简安包
1 Rstudio控制台输入library(tidyr)
,检查是否已经安装过
2-1安装过:congratulation!
2-2没安过:键入install.packages("tidyr")自动安装,再加载tidyr看一下
(若报错,换国内镜像:Tools→Global Options→Packages→CRAN mirror→Change→China开头几个选项里,哪个近选哪个)
二、了解包裹
(一)认识Tidy Data
Tidy Data我更喜欢把它联想成R大哥变魔术的辅助动物-那只泰迪熊🐻:这个泰迪就是一个管理小队长,可以把数据归拢的齐齐刷刷💁♀️最简单的理解示例就好比用Excel录入原始数据,你得把它变成SPSS格式才能进行统计处理吧,tidy就是中间这个“变”的环节。
(二) 初步了解tydir功能
(1)数据框的变形
(2)处理数据框中的空值
(3)根据一个表格衍生出其他表格
(4)实现行或列的分割和合并
🚩数据→数据框→数据处理+作图
(三)了解数据框
1 新建数据框(直接赋值给bioplanet)
bioplanet<-data.frame(GeneID = rep("gene1",times=4),SampleName =paste("Sample",1:4,sep=""),Expression=c(14,19,18,15))
2 了解含义
-
data.frame
:数据框。 -
rep
:重复,括号中填要重复的字符和重复次数。 -
sep
:分隔符。 -
paste
:连接两个字符串。括号要填两个代连接字符并指定分隔符(sep),没有分隔符就填sep=“” -
raw
行;col
列(column)。 - 列名=列值(列名要加双引号)如:
"gene1"
,"Sample"
。 - 概念:key-value--“键值对”,是“两个列名”的一种对应关系,如SampleName和Expression的对应。
3 注意事项
- 函数后面要加括号,括号里第一个参数是数据框名 如complete(table,nesting……)里的table
- 字符串要加双引号:行名和列名部分可以不用加,但其他里的要加。
施法
1.Reshape Data
归拢数据
首先,建立一个施法对象--数据
a<-data.frame(country=c("A","B","C"),"1999"=paste(c(0.7,37,212),"K"),"2000"=paste(c(2,80,213),"K"))
然后,变变变💠
-
标准修改:
gather(a,X1999,X2000,key = "year",value = "cases")
-
简便修改:
gather(a,"year","cases",X1999,X2000)
错误修改案例gather(a,X1999,X2000,"year","cases")
这告诉了我们其所在位置的合理性
-
排除法修改:
gather(a,year,cases,-country)
注:花花说这样的报错可以忽略哟~~
2.Handle Missing Values
用于处理丢失的数据(就是某些单元格有空值的情况)。 处理方式如下:
(1)删除整行
(2)根据上下文(瞎)蒙一个
(3)同一列的空值填上同一个数。
- 导入数据:
X<-read.csv('doudou.csv')
- 导出数据:
write.csv(X,'doudou.csv')
-
删除空值行:
drop_na(X,X2)
-
根据上一行填空值:
fill(X,X2)
-
空值填特定值:
replace_na(X,list(X2=2))
3. Expand Tables
补空位和展列表
-
complete(把空值的位置补全)
complete(X,nesting(X1),fill = list(X2=5))
-
expand(列出每列值所有可能的组合)光看括号里的字就能理解我算你赢🤪
expand(Superman,GeneId,SampleName,Expression)
看结果是不是就明白点了?是的😂
就是把原来的数据排列组合再生成新表
4.split cells
分分合合
首先建立一个table.txt
然后,变变变💠
这块呢花花没有给“投食儿”,所以要根据原示例代码自学一下。先拿按列分割开刀
separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,
convert = FALSE, extra = “warn”, fill = “warn”, …)
乍一看,懵了吧?对!那就拆一拆,解读一下吧~
data
:数据框(前面讲了,bingo)
col
:需要被拆分的列(bingo)
into
:新建的列名,为字符串向量
sep
:被拆分列的分隔符(bingo)
remove
:是否删除被分割的列(Linux就接触过了,bingo)
好的,那就试一下吧~
-
按列分割:
separate
-
按行分割:
separate_rows
原理同上,继续试一试~
-
分割完了再合并回去:
unite
思路:把最原始table的两列数据拆成了三列,再把这个三列合并回最初的两列
Xmind
两天下来,R大哥还是可以的。
摒除成见,友好相处,才是王道🤝
深呼吸,放轻松,保持微笑🙂