前兩天一直覺(jué)得R太難了,學(xué)的頭大暂吉,通過(guò)今天的學(xué)習(xí)胖秒,終于讓我擯棄前嫌,開(kāi)始喜歡上了R慕的,真的是功能強(qiáng)大又簡(jiǎn)潔阎肝,非常友好啊。
今天的主要是通過(guò)對(duì)R語(yǔ)言中tidyr包的學(xué)習(xí)肮街,來(lái)認(rèn)識(shí)R包的作用风题。
準(zhǔn)備工作
一、 如何獲取
方法1:去百度/谷歌XX小抄
方法2:找Rstudio的cheatsheet網(wǎng)站(網(wǎng)速好慢的)
https://www.rstudio.com/resources/cheatsheets/
方法2.我們教程里用到的包都可以到生信星球公眾號(hào)回復(fù)相應(yīng)的包名來(lái)獲取
---摘自生信星球教程
二低散、了解tidyr
簡(jiǎn)單的說(shuō),這個(gè)包的作用就是“tidy”你的數(shù)據(jù)骡楼!把你要用的數(shù)據(jù)處理成標(biāo)準(zhǔn)而統(tǒng)一的數(shù)據(jù)框(Tidy Data)熔号,從而進(jìn)行進(jìn)一步的數(shù)據(jù)處理和作圖。
功能
(1)數(shù)據(jù)框的變形
(2)處理數(shù)據(jù)框中的空值
(3)根據(jù)一個(gè)表格衍生出其他表格
(4)實(shí)現(xiàn)行或列的分割和合并
---摘自生信星球教程
三鸟整、安裝tidyr包
準(zhǔn)備工作---打開(kāi)RStudio引镊,設(shè)置工作目錄
> getwd()
[1] "C:/Users/Administrator/Documents"
> setwd("C:/Users/Administrator/Desktop/RData")
> getwd()
[1] "C:/Users/Administrator/Desktop/RData"
1.檢查是否安裝
library(tidyr)
Error in library(tidyr) : 不存在叫‘tidyr’這個(gè)名字的程輯包
2.下載并安裝tidyr
install.packages("tidyr")
Tips:若安裝報(bào)錯(cuò),則更改RStudio的鏡像為國(guó)內(nèi)的(在安裝R/RStudio那一節(jié)的教程有提到,不再贅述)弟头。
3.重新加載tidyr
library(tidyr)
四吩抓、數(shù)據(jù)框小常識(shí)
1.新建數(shù)據(jù)框
后面的學(xué)習(xí)會(huì)需要我們新建數(shù)據(jù)框,所以要提前get這個(gè)技能赴恨。
語(yǔ)法示例:
a <- data.frame(GeneId = rep("gene5",times=3),SampleName = paste("Sample",1:3,sep = ""),Expression = c(14,19,18))
> a
GeneId SampleName Expression
1 gene5 Sample1 14
2 gene5 Sample2 19
3 gene5 Sample3 18
tips:
- rep---重復(fù)疹娶,括號(hào)中填要重復(fù)的字符和重復(fù)次數(shù)。
- paste---連接兩個(gè)字符串伦连,括號(hào)要填兩個(gè)代連接字符并指定分隔符(sep)雨饺,沒(méi)有分隔符就填sep=“”。
- 1:3---表示從1到三惑淳。如需一列中需要填入三個(gè)無(wú)規(guī)律的數(shù)字额港,可以用向量c(1,3歧焦,4)移斩,同樣如果填的是字符串也需要加雙引號(hào),例如c("doudou","huahua","xiaoyu")绢馍。
---摘自生信星球教程
2.了解概念:key-value--“鍵值對(duì)”
表示一種對(duì)應(yīng)關(guān)系向瓷。“鍵”和“值”都是列名痕貌,如SampleName和Expression的對(duì)應(yīng)风罩。
Tips:本節(jié)似乎沒(méi)有用到,雖然在度娘上搜索學(xué)習(xí)了一下舵稠,感覺(jué)自己沒(méi)有什么深刻的認(rèn)識(shí)超升。
3.Tips
- 函數(shù)后面一般都要加括號(hào),括號(hào)里第一個(gè)參數(shù)是都數(shù)據(jù)框名
- 字符串要加雙引號(hào)(行名和列名也是字符串哺徊,但是可以不用加)室琢,其他單元格(姑且這么叫了)里出現(xiàn)的字符串要加。
- 行 raw
列 column落追,簡(jiǎn)化寫(xiě)法為col
---摘自生信星球教程
四盈滴、認(rèn)識(shí)Tidy Data
這是一種組織表格數(shù)據(jù)的方式,提供了一種能夠跨包使用的“統(tǒng)一”的數(shù)據(jù)格式轿钠。
tidyr的基本操作
一巢钓、Reshape Data(數(shù)據(jù)重塑)
- 新建數(shù)據(jù)框a。
a <- data.frame(country=c("a","B","C"),`1999`=paste(c(0.7,37,212),"K"),`2000`=paste(c(2,80,213),"K"))
> a
country X1999 X2000
1 a 0.7 K 2 K
2 B 37 K 80 K
3 C 212 K 213 K
- gather函數(shù)
將寬數(shù)據(jù)變成長(zhǎng)數(shù)據(jù)格式
1.語(yǔ)法
gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
data:需要被轉(zhuǎn)換的寬形表
key:將原數(shù)據(jù)框中的所有列賦給一個(gè)新變量key
value:將原數(shù)據(jù)框中的所有值賦給一個(gè)新變量value
…:可以指定哪些列聚到同一列中
na.rm:是否刪除缺失值
2.示例
gather(a,"year","cases",X1999,X2000)
country year cases
1 a X1999 0.7 K
2 B X1999 37 K
3 C X1999 212 K
4 a X2000 2 K
5 B X2000 80 K
6 C X2000 213 K
3.Tips:三種命令比較
gather(a,X1999,X2000,key = "year",value = "cases")#正常的做法
gather(a,"year","cases",X1999,X2000) #推薦的偷懶做法
gather(a,year,cases,-country) #-country的意思就是合并除country外剩下的列疗垛。
- spread函數(shù)
將長(zhǎng)數(shù)據(jù)變成寬數(shù)據(jù)格式
spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
data:為需要轉(zhuǎn)換的長(zhǎng)形表
key:需要將變量值拓展為字段的變量
value:需要分散的值
fill:對(duì)于缺失值症汹,可將fill的值賦值給被轉(zhuǎn)型后的缺失值
二、Handle Missing Values(處理丟失的數(shù)據(jù))
當(dāng)某些單元格有空值的情況下贷腕,需要處理這些空值背镇。
- 讀取示例數(shù)據(jù)
X <- read.csv('doudou.txt')
> X
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
Tips: read.csv()優(yōu)點(diǎn)
1.支持R和Excel
2.默認(rèn)分隔符是“咬展,”,導(dǎo)出時(shí)也不會(huì)默認(rèn)加引號(hào)瞒斩。
3.轉(zhuǎn)換txt不會(huì)變亂碼
- 刪除整行
drop_na():有空值的破婆,整行刪除掉
括號(hào)里填數(shù)據(jù)框名,依據(jù)的列名(有空值那一列的列名)
drop_na(X,X2)
X1 X2
1 A 1
4 D 3
- 根據(jù)上下文(瞎)蒙一個(gè)
fill()胸囱,根據(jù)上一行的數(shù)值填充上.
fill(X,X2)
X1 X2
1 A 1
2 B 1
3 C 1
4 D 3
5 E 3
- 同一列的空值填上同一個(gè)數(shù)
replace_na()祷舀,空值填進(jìn)去特定的一個(gè)數(shù)值(還是在應(yīng)付)
括號(hào)里填數(shù)據(jù)框名,要填的列名=要填的值
replace_na(X,list(X2=2))
X1 X2
1 A 1
2 B 2
3 C 2
4 D 3
5 E 2
三旺矾、Expand Tables
- complete(把空值的位置補(bǔ)全)
complete(X,nesting(X1),fill = list(X2=5))
# A tibble: 5 x 2
X1 X2
<fct> <dbl>
1 A 1
2 B 5
3 C 5
4 D 3
5 E 5
- expand(列出每列值所有可能的組合)
expand(a,country,X1999,X2000)
# A tibble: 27 x 3
country X1999 X2000
<fct> <fct> <fct>
1 a 0.7 K 2 K
2 a 0.7 K 213 K
3 a 0.7 K 80 K
4 a 212 K 2 K
5 a 212 K 213 K
6 a 212 K 80 K
7 a 37 K 2 K
8 a 37 K 213 K
9 a 37 K 80 K
10 B 0.7 K 2 K
# ... with 17 more rows
四蔑鹦、split cells(把一列拆成兩列或多列)
- 建立新數(shù)據(jù)框
b <- data.frame(country=c("A","B","C"),year=c(1999,2000,2001),rate=c("1999-1","2000-2","2001-3"))
> b
country year rate
1 A 1999 1999-1
2 B 2000 2000-2
3 C 2001 2001-3
- separate:按列分割
1.語(yǔ)法
separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE, convert = FALSE, extra = “warn”, fill = “warn”, …)
data:為數(shù)據(jù)框
col:需要被拆分的列
into:新建的列名,為字符串向量
sep:被拆分列的分隔符
remove:是否刪除被分割的列
2.示例
separate(b,rate,into=c("cases","pop"),sep = "-")
country year cases pop
1 A 1999 1999 1
2 B 2000 2000 2
3 C 2001 2001 3
- separate_rows:按行分割
separate_rows(b,rate,sep = "-")
country year rate
1 A 1999 1999
2 A 1999 1
3 B 2000 2000
4 B 2000 2
5 C 2001 2001
6 C 2001 3
- unite:分割完了再合并回去
1.語(yǔ)法:
unite(data, col, …, sep = “_”, remove = TRUE)
data:為數(shù)據(jù)框
col:被組合的新列名稱(chēng)
…:指定哪些列需要被組合
sep:組合列之間的連接符箕宙,默認(rèn)為下劃線(xiàn)
remove:是否刪除被組合的列
2.示例
unite(b,year,rate,col = "year",sep = "-")
country year
1 A 1999-1999-1
2 B 2000-2000-2
3 C 2001-2001-3
Tips:這個(gè)合并結(jié)果和我想象的不一樣嚎朽,嗯....還需要再研究研究。