R 基本知識學(xué)習(xí)

用于記錄R基本知識莹痢,勤學(xué)勤練習(xí)

grep

#  a為一個data frame,取含有RNA-Seq的行
index <- grep("RNA-Seq", a$Assay_Type)
b <- a[index,]

讀取文件件蚕,選擇不讀哪一行

##不讀取帶有!的行
data <- read.table("file",comment.char="!", sep="\t")

去掉數(shù)據(jù)框的某一列,添加行名, 列名

##刪除第一列, b是data.frame
b<-b[,-1]
##添加行名遭顶,列名
rowname(b) <- b[,1]
colname(b) <- b[1,]

sort

##a為一data frame
##最小值
sort(a$num)[1] ; 等價min(a$num)
##最大值
sort(a$num, decreasing=T)[1] ;  等價max(a$num)
##five number, 最小值,下四分位,中位數(shù)蜀变,上四分位,最大值
fivenum(a$num)
##<5000的行
b <- a[a$num < 5000,]

strsplit 切割

#以2進(jìn)行分割
b <- "adfdfd2jdfkd"
strsplit(b, "2")
adfdf, jdfkd

t檢驗(yàn)

t.test(1:10, y = c(7:20))
t = -5.4349, df = 21.982, p-value = 1.855e-05
#p value <0.05, 則顯著 

paste, rep

##a, 連續(xù)粘貼4次
paste("a",1:5)
#結(jié)果:
a 1, a 2, a 3, a 4
##a, 連續(xù)粘貼4次,以“-”連接
paste("a",1:5, sep='-')
結(jié)果:
a-1, a-2, a-3, a-4

##復(fù)制a 4次
rep("a", 4)
結(jié)果:
a,a,a,a

apply 循環(huán)

##b 為一個data frame, 每一行求平均數(shù)
apply(b, 1, function(x){
        mean(x)
})
其中 1 代表行介评,2 代表列
上面可以簡寫為:
apply(b, 1, mean)

# 獲取超過5個元素>0 的行
b[apply(b ,1 function(x) sum(x>1) >5), ]

輸出圖片

# 比如輸出PDF圖片
pdf("test.pdf", width=12, height=10)
ggplot(data, aes(x,y)) +geom_line()
dev.off

quantile()

## 在R語言中取百分位比用quantile()函數(shù)
> data <- c(1,2,3,4,5,6,7,8,9,10)
> quantile(data,0.5)
50% 
5.5 
> quantile(data,c(0.25,0.75))
 25%  75% 
3.25 7.75

## 可以畫閾值線库北,比如BSA畫圖時;有index 數(shù)據(jù) data
p + geom_hline(yintercept =quantile(data, 0.95) ,color="blue",linetype=2,size-0.5)

which()

# which 可以篩選數(shù)據(jù)庫中特有的行,比如有數(shù)據(jù)框data们陆,篩選出delt大于0的行
zheng <- data[which(data$delt>0),]

melt()寒瓦,dcast()

## melt() 和 dcast()為reshape2中的命令

## melt(): 可以將長的數(shù)據(jù)框變?yōu)槎痰?> head(new_data)
     pos   xx_mean   xy_mean   yy_mean
19 36001 1.4052965 0.8884643 1.0787320
20 38001 0.8538059 1.0241777 1.1718369
21 40001 1.7150511 1.5263786 1.4663535
23 44001 0.0000000 1.8001673 0.9257189
24 46001 0.2837331 1.5285861 1.5567648
25 48001 0.6670272 2.0511266 0.0000000

> head(melt(new_data,id.vars = "pos"))
    pos variable     value
1 36001  xx_mean 1.4052965
2 38001  xx_mean 0.8538059
3 40001  xx_mean 1.7150511
4 44001  xx_mean 0.0000000
5 46001  xx_mean 0.2837331
6 48001  xx_mean 0.6670272

以“pos”為不變的ID列,其它變量合并在variable列中坪仇,其對應(yīng)的值為value列

## dcast(): 可以將短的數(shù)據(jù)框變?yōu)殚L的
> head(test)
    pos variable     value
1 36001  xx_mean 1.4052965
2 38001  xx_mean 0.8538059
3 40001  xx_mean 1.7150511
4 44001  xx_mean 0.0000000
5 46001  xx_mean 0.2837331
6 48001  xx_mean 0.6670272

> head(dcast(test,pos~variable))
    pos   xx_mean   xy_mean   yy_mean
1 36001 1.4052965 0.8884643 1.0787320
2 38001 0.8538059 1.0241777 1.1718369
3 40001 1.7150511 1.5263786 1.4663535
4 44001 0.0000000 1.8001673 0.9257189
5 46001 0.2837331 1.5285861 1.5567648
6 48001 0.6670272 2.0511266 0.0000000

#~左邊的表示不變的列杂腰,右邊則展開

dplyr包處理數(shù)據(jù)

均以如下例子進(jìn)行操作

> head(data)
  Chrom      Pos       Pvalue
1     7  5813753 4.191874e-10
2     7  5831698 2.779123e-09
3     7  5818992 3.800454e-09
4     7  5850455 1.097069e-05
5     3 14961172 1.521800e-05
6     7  5808739 1.833734e-05
  • filter()
    篩選Chrom >6,Pos >14961172
data_chr <- data%>% filter(Chrom>6,Pos>14961172)
> head(data_chr)
  Chrom      Pos       Pvalue
1     7  5813753 4.191874e-10
2     7  5831698 2.779123e-09
3     7  5818992 3.800454e-09
4     7  5850455 1.097069e-05

\color{red}{不同邏輯條件有'==, >, >= 等'}

  • select()
    該函數(shù)可以去除某一列,去除Chrom那一列
> data_min <- data%>% select(-Chrom)
> head(data_min)
       Pos       Pvalue
1  5813753 4.191874e-10
2  5831698 2.779123e-09
3  5818992 3.800454e-09
4  5850455 1.097069e-05
5 14961172 1.521800e-05
6  5808739 1.833734e-05
  • filter_all(), filter_if(), filter_at()
    以上函數(shù)均對數(shù)值型數(shù)值操作椅文,若不是喂很,則需要用selec()去除

去除所有屬性小于6的行

data_p <- data%>% filter_all(all_vars(.<6))

篩選任意一屬性>3的行

data_p <- data%>% filter_all(any_vars(.>3))

篩選以seq開頭的屬性任一大于3的行

data_r <- data%>% filter_at(vars(starts_with("Seq")),any_vars(.>3))

篩選以d開頭的屬性任一可被2整除的行

data_R <- data%>% filter_at(vars(starts_with("Seq")),any_vars((. %%2)==0))
  • group_by() summaries()

group_by()指在對一數(shù)據(jù)框按照一定變量進(jìn)行分組,一般和summaries() 一起用

# 按cyl進(jìn)行分組
by_cyl <- mtcars %>% group_by(cyl)
# 
by_cyl %>% summarise(
  disp = mean(disp),
  hp = mean(hp)
)
# A tibble: 3 x 3
    cyl  disp    hp
  <dbl> <dbl> <dbl>
1     4  105.  82.6
2     6  183. 122. 
3     8  353. 209
cyl組中有4皆刺,6少辣,8三個變量,所以根據(jù)該變量進(jìn)行求均值

也可以同時對兩個變量進(jìn)行分組

#現(xiàn)對vs進(jìn)行分組羡蛾,然后對am進(jìn)行分組漓帅,vs中有0,1兩個值痴怨,am中也有0煎殷,1兩個值
by_vs_am <- mtcars %>% group_by(vs, am)
# 分別求數(shù)量
by_vs <- by_vs_am %>% summarise(n = n())
> by_vs
# A tibble: 4 x 3
# Groups:   vs [2]
     vs    am     n
  <dbl> <dbl> <int>
1     0     0    12
2     0     1     6
3     1     0     7
4     1     1     7
# 可以看到vs 為0,am為0 共有12個腿箩,vs為0豪直,am為1的有6個

mutata()

用于添加新的一列

> head(mtcars)
                  mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1


> head(mtcars %>% mutate(total =1))
  mpg cyl disp  hp drat    wt  qsec vs am gear carb total
1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4     1
2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4     1
3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1     1

cbind(),rbind()

合并兩個數(shù)據(jù)框,類似于cat,paste

test <- cbind(data1,data2)

即可進(jìn)行合并

rainbow()

得到不同的顏色

data <- read.table("IV_vs_non_IV",sep = "\t",header = T)
cols <- rainbow(5*1.2)
cols
[1] "#FF0000FF" "#FFFF00FF" "#00FF00FF" "#00FFFFFF" "#0000FFFF" "#FF00FFFF"
boxplot(ks ~ gene, data = data, col = cols)

更換兩列內(nèi)容

比如有一數(shù)據(jù)框

head(data)
   Gene   Go level
1 gene1 GO:1    BP
2 gene2 Go:2    MF

將第二列和第一列互換

head(data[c(2,1,3)])
    Go  Gene level
1 GO:1 gene1    BP
2 Go:2 gene2    MF

reorder() 排序

現(xiàn)有兩列數(shù)據(jù)
v1 v2
1 23
2 32
3 2
4 9

## 以v2從大到小排序后珠移,得到對應(yīng)v1
reorder(v1,v2) 

## 以v2從小到大排序后弓乙,得到對應(yīng)v1
reorder(v1,-v2) 

BiocManager() 可非常方便安裝R包

首先安裝BiocManager

install.packages('BiocManager')
BiocManager::install('')

R包pheatmap

  • border_color
    熱圖的單位元素的描邊顏色末融,NA表示不描邊
    默認(rèn):“gray60”
  • cluster_rows (按原來順序排列)
    用布爾值來判定行元素是不是應(yīng)該被clustered or clust object。
    默認(rèn):TRUE
    同理暇韧,cluster_cols決定是否應(yīng)該把列clust

for 循環(huán)

library(ggplot2)

## 具體根據(jù)染色體數(shù)量進(jìn)行調(diào)整勾习;下面圖一個3X4 共12條染色體
par(mfrow =c(3,4))

data <- read.table('Tri_ang_all_ltr.4buyi1Mb200kb_4r',sep = '\t',header = T)
對應(yīng)染色體名稱
vec <- c('LG01','LG02','LG03','LG04')

  data1 <- data[which(data$Chr==val),]
    barplot(P ~ BP, data = data1, col='#3366cc', border='#3366cc',ylab = 'Number',xlab = paste0(val,' (Mb)'))
}

查看R包路徑,以及修改路徑

1.1 更改R包安裝路徑

  • 在R里面運(yùn)行命令(假定修改為如下路徑)
.libPaths('/data/pub//R/x86_64-redhat-linux-gnu-library/3.6')
  • 在安裝包是定義
install.packages('LDheapment', lib='/data/pub//R/x86_64-redhat-linux-gnu-library/3.6')

1.2 查看R包的路徑

> .libPaths()
[1] "/data/pub//R/x86_64-redhat-linux-gnu-library/3.6"
[2] "/data/pub//miniconda2/lib/R/library"

可以看到有2個r包的路徑

1.3 修改R包路徑

  • 臨時修改
.libPaths('/data/pub//R/x86_64-redhat-linux-gnu-library/3.6')

臨時講上述路徑添加為r包的路徑

  • 永久性修改

新建一個 .Rprofile的文本文件

touch  .Rprofile

并將 要定義的路徑存入該文本文檔中懈玻。路徑如下

.libPaths(c("path1","path2","path3"))

package ‘XXX’ is not available for this version of R

  • R包開源網(wǎng)站
  • 找到所需要安裝的包巧婶,比如LDheatmap
  • 安裝
install.packages("https://cran.r-project.org/src/contrib/Archive/LDheatmap/LDheatmap_1.0-6.tar.gz",repos = NULL, type="source")

鑒定密度圖的峰值

library(reshape2)
## 讀取數(shù)據(jù)
data <- read.table('test.txt')
## 鑒定峰值函數(shù)
densFindPeak <- function(x){
  td <- density(x)
  maxDens <- which.max(td$y)
  list(x=td$x[maxDens],y=td$y[maxDens])
}
#計(jì)算峰值
densFindPeak(data$v1)

不同的group分別統(tǒng)計(jì)fivenumer

## 有data數(shù)據(jù)
type  value
A    34
A  343
A  45
B  43
B  34
B  65
C  7
C  9
C  10
## 統(tǒng)計(jì)
library(tapply)
tapply(df$data, df$groupBy, summary)
tapply(data$value, data$type, summary)

基本操作

packageVersion("rvcheck") # 查看rvcheck版本
## 刪除R包
remove.packages("rvcheck") 
# 下載包
download.file("https://cran.r-project.org/src/contrib/Archive/rvcheck/rvcheck_0.1.8.tar.gz","rvcheck_0.1.8.tar.gz")
## 本地安裝包
install.packages("rvcheck_0.1.8.tar.gz",repos = NULL)
## 在線安裝包
install.packages("https://cran.r-project.org/src/contrib/Archive/rvcheck/rvcheck_0.1.8.tar.gz",repos = NULL,type = "source")

ifelse(),將指定列數(shù)值大于一定數(shù)值進(jìn)行替換


# 創(chuàng)建一個示例數(shù)據(jù)框
df <- data.frame(A = c(1,2,3,4,5), B = c(1,2,4,5,6))
 
# 使用ifelse函數(shù)涂乌,將第二列(B列)中大于3的值替換為3
df$B <- ifelse(df$B > 3, 3, df$B)

使用Venn畫Venn圖

library(venn)
venn(4)
venn(c("1000", "0100", "0010", "0001"),
     borders = FALSE)
## 最多可以畫7個艺栈,如果是7則
venn(7)
venn(c("1000000", "0100000", "0010000", "0001000",
       "0000100", "0000010", "0000001", "1111111"),
     borders = FALSE)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市湾盒,隨后出現(xiàn)的幾起案子湿右,更是在濱河造成了極大的恐慌,老刑警劉巖罚勾,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅人,死亡現(xiàn)場離奇詭異,居然都是意外死亡尖殃,警方通過查閱死者的電腦和手機(jī)丈莺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來送丰,“玉大人缔俄,你說我怎么就攤上這事◎秸剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵铐懊,是天一觀的道長邀桑。 經(jīng)常有香客問我,道長科乎,這世上最難降的妖魔是什么壁畸? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮茅茂,結(jié)果婚禮上捏萍,老公的妹妹穿的比我還像新娘。我一直安慰自己空闲,他們只是感情好令杈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碴倾,像睡著了一般逗噩。 火紅的嫁衣襯著肌膚如雪掉丽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天异雁,我揣著相機(jī)與錄音捶障,去河邊找鬼。 笑死纲刀,一個胖子當(dāng)著我的面吹牛项炼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播示绊,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锭部,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耻台?” 一聲冷哼從身側(cè)響起空免,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盆耽,沒想到半個月后蹋砚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摄杂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年坝咐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片析恢。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡墨坚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出映挂,到底是詐尸還是另有隱情泽篮,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布柑船,位于F島的核電站帽撑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鞍时。R本人自食惡果不足惜亏拉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逆巍。 院中可真熱鬧及塘,春花似錦、人聲如沸锐极。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灵再。三九已至味咳,卻和暖如春庇勃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背槽驶。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工责嚷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掂铐。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓罕拂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親全陨。 傳聞我的和親對象是個殘疾皇子爆班,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355