用于記錄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
- 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)