R語言基礎(生信所需)一

0 雜談

上游分析 :使用linux ex.轉錄組得到表達矩陣
下游分析:使用R 差異分析灿巧、生存分析


1.R語言基礎

  • 管理工作目錄
    新建New project - 設置new directory - 新建腳本
    從Rproject打開,直接啟動到該目錄下
setwd() #不方便的使用方式
getwd()
  • 命令響應
    運行 cmd+enter 逐行運行
  1. 輸出結果
  2. 報錯:Error
  3. 警告:Warning
  4. 運行完成
  5. 運行中 esc中止
  6. 進一步選擇 + 中止/補充
  • R交互
  1. 控制臺
  2. 腳本
    Tab:補全函數(shù)/打開選擇目錄

  • 數(shù)據(jù)類型
> class("a")
[1] "character"
> class(TRUE)
[1] "logical" #邏輯型/布爾型
> class(3)
[1] "numeric"

邏輯型數(shù)據(jù)判斷

>,<,<=,>=,==,!=
&and |or !not

數(shù)據(jù)類型的判斷和轉換

is.numeric()
is.logical()
is.character()
#判斷
as.numeric()
as.logical()
as.character()
#轉換
c(1,"a") #numeric -> character
c("a",T) #logical -> character T="TRUE"
c(T,2) #logical -> numeric T=1/F=0/NA=NA
#強制轉換
class()
str()#查看變量及變量下所有數(shù)據(jù)類型
#查看數(shù)據(jù)類型

2.1.向量生成??

#(1)用 c() 結合到一起
c(2,5,6,2,9) 
c("a","f","md","b")
#(2)連續(xù)的數(shù)字用冒號“:” 
1:5
#(3)有重復的用rep(),有規(guī)律的序列用seq(),隨機數(shù)用rnorm
rep("gene",times=3)  
seq(from=3,to=21,by=3)
rnorm(n=30)
#(4)通過組合,產生更為復雜的向量昔瞧。
paste0(rep("gene",times=3),1:3)
paste(rep("gene",times=3),1:3,sep = " ") #times = length( )
#簡化原理見下 循環(huán)補齊

2.2對單個向量進行的操作

#(1)賦值給一個變量名
x = c(1,3,5,1) #隨意的寫法
x <- c(1,3,5,1) #規(guī)范的賦值符號Alt+減號

#賦值+輸出一起實現(xiàn)
x <- c(1,3,5,1);x
(x <- c(1,3,5,1))

#(2)簡單數(shù)學計算
x+1
log(x)
sqrt(x)

#(3)根據(jù)某條件進行判斷,生成邏輯型向量
x>3
x==3
#(4)初級統(tǒng)計
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位數(shù)
var(x) #方差
sd(x) #標準差
sum(x) #總和

length(x) #長度
unique(x) #去重復
duplicated(x) #對應元素是否重復
!duplicated(x) #返回相反邏輯值
table(x) #重復值統(tǒng)計
sort(x,decreasing = F) #排序

2.3.對兩個向量進行的操作

x = c(1,3,5,1)
y = c(3,2,5,6)
#(1)邏輯比較,生成等長的邏輯向量
x == y 
x %in% y #x中的元素在y中嗎
#(2)數(shù)學計算
x + y
#(3)“連接“
paste(x,y,sep=":")
#(4)交集、并集革屠、差集
intersect(x,y)
union(x,y)
setdiff(x,y)
setdiff(y,x)

#當兩個向量長度不一致
x = c(1,3,5,6,2)
y = c(3,2,5)
x == y #warning #循環(huán)補齊
#利用循環(huán)補齊簡化代碼
paste0(rep("gene",3),1:3)
paste0("gene",1:3)

2.4.向量篩選(取子集)

x <- 8:12
#根據(jù)邏輯值取子集
x[x==10]
x[x<12]
x[x %in% c(9,13)] 
#根據(jù)位置取子集
x[4]
x[2:4]
x[c(1,5)]
x[-4]
x[-(2:4)]

2.5.修改向量中的某個/某些元素:取子集+賦值

x <- 8:12
x[4] <- 40 #改一個元素
x[c(1,5)] <- c(80,20) #改多個元素

2.6 簡單向量作圖

k1 = rnorm(12);k1
k2 = rep(c("a","b","c","d"),each = 3);k2
plot(k1)
boxplot(k1~k2) 

難點--向量匹配排序:match

x <- c("A","B","C","D","E") 
y <- c("B","D","E","A","C") 
match(x,y) 
#[1] 4 1 5 2 3 
y[match(x,y)] #根據(jù)x,調整y的順序

df <- df[,match(seq_besoin,colnames(df))] #調整數(shù)據(jù)框列位置
y=c(x[1:n-1],7,x[n:length(x)]) #在x的n位添加
join <- function(x,n,y){ #寫成函數(shù)
  c(x[1:n-1],y,x[n:length(x)])
}
x=c(1,3,5,8,6)
join(x,3,7)

重點:數(shù)據(jù)框

1.數(shù)據(jù)框來源

  • 在R中新建
  • 由已有數(shù)據(jù)轉換或處理得到
  • 從文件中讀取
  • 內置數(shù)據(jù)集

2.新建和讀取數(shù)據(jù)框

df <- data.frame(gene = c("gene1","gene2","gene3"),
                 sam  = c("sample1","sample2","sample3"),
                 exp  = c(32,34,45))
df <- data.frame(gene  = paste0("gene",1:3),
                 sam   = paste0("sample",1:3),
                 exp   = c(32,34,45))
df

df2 <- read.csv("gene.csv") ; df2

3.數(shù)據(jù)框屬性描述

dim(df)
nrow(df)
ncol(df)
rownames(df)
colnames(df)
df[,-ncol(df)]

4.數(shù)據(jù)框取子集

df[2,2]
df[2,]
df[,2]
df[c(1,3),1:2]

df[,"gene"]
df[,c('gene','exp')]

df$exp
mean(df$exp)

5.數(shù)據(jù)框編輯

#改一個格
df[3,3]<- 5
#改一整列
df$exp<-c(12,23,50)     
#排宰?
df$abc <-c(23,15,37) 
df
#改行名和列名
rownames(df) <- c("r1","r2","r3")
#只修改某一行/列的名
rownames(df)[2]="x"

練習3-1

# 1.讀取excise.csv這個文件似芝,賦值給test。
test <- read.csv("excise.csv")
> test
   Petal.Length Petal.Width    Species
1           4.6         1.5 versicolor
2           5.9         2.1  virginica
3           4.5         1.5 versicolor
4           6.0         2.5  virginica
5           4.0         1.3 versicolor
6           4.7         1.4 versicolor
7           1.3         0.2     setosa
8           1.4         0.2     setosa
9           5.1         1.9  virginica
10          5.8         2.2  virginica
11          4.9         1.5 versicolor
12          1.4         0.2     setosa
13          1.5         0.2     setosa
14          5.6         1.8  virginica
15          1.4         0.2     setosa
# 2.描述test的屬性(行名列名板甘,行數(shù)列數(shù))党瓮。
dim(test)
nrow(test)
ncol(test)
rownames(test)
colnames(test)
# 3.求第一列數(shù)值的中位數(shù)
median(test[,1])
# 4.修改test前兩列的列名為Length和Width
colnames(test)[1:2] <- c("Length", "Width")
# 5.提取test中,最后一列值為versicolor或setosa的行盐类,組成一個新的數(shù)據(jù)框寞奸,賦值給test2。
test2 <- test[test$Species %in% c("versicolor","setosa"),]
test2 = test[test$Species!="virginica",]
test$Species == c("versicolor","setosa") 錯誤方式在跳,循環(huán)補齊
table(test)

6.數(shù)據(jù)框進階

#截取查看
iris
head(iris)
head(iris,3)
tail(iris)
iris[1:3,1:3]
#查看每一列的數(shù)據(jù)類型和具體內容
str(df)
str(iris)

#去除含有缺失值的行
#生成一個有NA的數(shù)據(jù)框
df<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)
df[2,2] <- NA
df[4,1] <- NA
na.omit(df)

#兩個表格的鏈接
test1 <- data.frame(name = c('jimmy','nicker','doodle'), 
                    blood_type = c("A","B","O"))
test1
test2 <- data.frame(name = c('doodle','jimmy','nicker','tony'),
                    group = c("group1","group1","group2","group2"),
                    vision = c(4.2,4.3,4.9,4.5))
test2 

test3 <- data.frame(NAME = c('doodle','jimmy','lucy','nicker'),
                    weight = c(140,145,110,138))
tmp  =merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")
cbind(test2,test3) #rows數(shù)量和名稱相同
rbind(test1,test3) #cols數(shù)量和名稱相同

矩陣和列表

m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #列名
#轉置和轉換
m
t(m)
as.data.frame(m)

pheatmap::pheatmap(m) #默認聚類
pheatmap::pheatmap(m,cluster_cols = F,cluster_rows = F)

#列表
l <- list(m=matrix(1:9, nrow = 3),
          df=data.frame(gene  = paste0("gene",1:3),
                        sam   = paste0("sample",1:3),
                        exp   = c(32,34,45)),
          x=c(1,3,5))
l
l[[2]]
l$df

補充:元素的名字

#(1)向量
x=1:10
names(x)=letters[1:10]
x
x["a"]
#(2)數(shù)據(jù)框
df
names(df)
df[,"X1"]
#(3)列表
names(l)
l[["df"]]

練習3-2

# 1.統(tǒng)計iris最后一列有哪幾個取值枪萄,每個取值重復了多少次
table(iris[,ncol(iris)])
# 2.提取iris的前10行,前4列猫妙,并轉換為矩陣瓷翻,賦值給a。
a <- as.matrix(iris[1:10,1:4])
# 3.將a的行名改為flower1割坠,flower2...flower10齐帚。
rownames(a)[1:10] <- paste0("flower",1:nrow(a))
# 4.將a的第4到7行刪除(提示:刪除也是一種修改)
a <- a[-(4:7),]
# 5.b = rnorm(3),將a和b組成一個列表,賦值給x
x <- list(a, b = rnorm(3));x #未命名a
x <- list(a = a, b = rnorm(3));x 
# 6.探索x[2]和x[[2]]的區(qū)別(提示:數(shù)據(jù)結構)
class(x[2]) 
class(x[[2]])
class(x[[2]][1])
# 8.探索:列表x的元素有名字(names)嗎彼哼?
names(x)
names(x) <- c("a","b")

刪除

#刪除一個變量
rm(l)
#刪除多個變量
rm(df,m)
#刪除全部變量
rm(list = ls()) 
#清空控制臺
control+l

替換基因名簡易代碼

(想起了曾經這個步驟用了十幾行代碼童谒,思路麻煩至極)

colnames(y) <- x[match(colnames(y),x$file_name),]$ID
ou
colnames(y) <- x$ID[match(colnames(y),x$file_name)]

R語言中的排序,集合運算沪羔,reshape,以及merge總結

http://www.bio-info-trainee.com/1071.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末象浑,一起剝皮案震驚了整個濱河市蔫饰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愉豺,老刑警劉巖篓吁,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚪拦,居然都是意外死亡杖剪,警方通過查閱死者的電腦和手機冻押,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盛嘿,“玉大人洛巢,你說我怎么就攤上這事〈握祝” “怎么了稿茉?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長芥炭。 經常有香客問我漓库,道長,這世上最難降的妖魔是什么园蝠? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任渺蒿,我火速辦了婚禮,結果婚禮上彪薛,老公的妹妹穿的比我還像新娘茂装。我一直安慰自己,他們只是感情好陪汽,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布训唱。 她就那樣靜靜地躺著,像睡著了一般挚冤。 火紅的嫁衣襯著肌膚如雪况增。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天训挡,我揣著相機與錄音澳骤,去河邊找鬼。 笑死澜薄,一個胖子當著我的面吹牛为肮,可吹牛的內容都是我干的。 我是一名探鬼主播肤京,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼颊艳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忘分?” 一聲冷哼從身側響起棋枕,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妒峦,沒想到半個月后重斑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡肯骇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年窥浪,在試婚紗的時候發(fā)現(xiàn)自己被綠了祖很。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡漾脂,死狀恐怖假颇,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情符相,我是刑警寧澤拆融,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站啊终,受9級特大地震影響镜豹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蓝牲,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一趟脂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧例衍,春花似錦昔期、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梦抢,卻和暖如春般贼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奥吩。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工哼蛆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霞赫。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓腮介,卻偏偏與公主長得像,于是被迫代替她去往敵國和親端衰。 傳聞我的和親對象是個殘疾皇子叠洗,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容

  • 一.R環(huán)境設置 嘗試在線環(huán)境 你真的不需要設置自己的環(huán)境來開始學習R編程語言。 原因很簡單旅东,我們已經在線設置了R編...
    JackHCC閱讀 1,061評論 0 1
  • 一.R環(huán)境設置 嘗試在線環(huán)境 你真的不需要設置自己的環(huán)境來開始學習R編程語言惕味。 原因很簡單,我們已經在線設置了R編...
    JackHCC閱讀 526評論 0 0
  • R是一種編程語言玉锌,用函數(shù)可以實現(xiàn)統(tǒng)計計算和畫圖的功能。 R語言特點:開源疟羹,可擴展主守,簡單有效禀倔,可實現(xiàn)統(tǒng)計和可視化 R...
    霍曉輝_dd6f閱讀 596評論 0 0
  • 1. 概述 R語言是用于統(tǒng)計分析,圖形表示和報告的編程語言和軟件環(huán)境参淫。 R語言由Ross Ihaka和Robert...
    _凌浩雨閱讀 6,476評論 0 3
  • 2020-04-20 今天的內容 除說明外均引自:微信公眾號生信星球R語言基礎 1.R與R Studio的安裝之前...
    忍冬_a284閱讀 187評論 0 2