R day1 -基本概念操作-2

萬地高樓平地起,掌握基本的代碼規(guī)律和邏輯思維非常重要

每個基本的代碼和函數(shù)不運行是200次以上,是談不上掌握的

基本開始運行代碼

rm(list=ls())
options(stringsAsFactors = F)

tips

Tab鍵匹配補全
head(b)取b的前6行,同樣有tail()取末6行

基本數(shù)據(jù)類型

R 有四種基本數(shù)據(jù)類型,即數(shù)值型(numeric)、復數(shù)型(complex)、邏輯型(logical)、字符型(character),因子(factor)。
numeric:就是數(shù)字【需要注意的是有的雖然看起來是數(shù)字,但是被定義成了character或者factor,需要用as.numeric轉換】
character:用單引號或者雙引號包括起來的字符序列,一般我們稱之為字符串。
logical:邏輯型變量,即布爾值,表示“是”與“否”,“真”或“假”。
邏輯型用 TRUE 表示真,F(xiàn)ALSE 表示假。也可縮寫為 T或者 F,
但需要注意的是,T 和 F不是 R 的保留字,其含義可以被程序改變,因此最好是用 TRUE 和 FALSE,更加規(guī)范和安全。
R中的比較運算和邏輯運算都可以產(chǎn)生邏輯型數(shù)據(jù)。比較運算包括 >,<,>=,<=,==,!=(大于,小于,大于等于,小于等于,等于,不等于)。
邏輯運算包括 &,|,!(與、或、非)。

> 2>3
[1] FALSE
> a=seq(1,20)
> 8>a
 [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[17] FALSE FALSE FALSE FALSE

factor:應該是最難理解的一個變量類型
在R語言中,因子(factor)可以表示的是一個符號、一個編號或者一個等級,即,一個點。例如,人的個數(shù)可以是1,2,3,4......那么因子就包括,1,2,3,4.....
還有統(tǒng)計量的水平的時候用到的高、中、低,也是因子,因為他是一個點。
與之區(qū)別的向量,是一個連續(xù)性的值,例如,數(shù)值中有1,1.1,1.2......可以作為數(shù)值來計算,而因子則不可以。

sex<-c("M","F","M","M","F")
factor(sex)
sex.factor<-as.factor(sex)
#使用levels來取得因子中的水平
levels(sex.factor)
# [1] "F" "M"

不太好理解,新手剛開始不太用的上,我現(xiàn)在也不太理解factor,應該是比character多了半個維度的感覺

基本數(shù)據(jù)結構

無論是數(shù)值型(numeric)、邏輯型(logical)、字符型(character),因子(factor)變量都需要用容易來存儲,也就是數(shù)據(jù)結構
R的對象由幾種基本數(shù)據(jù)類型構成:
向量(vector) :一維空間
矩陣(matrix):二維空間,只可以存儲數(shù)值變量,但是較少用到,
數(shù)據(jù)框(dataframe):二維空間,可以存儲numeric,logical,character,factor型變量,在實際分析工作中用到的最多
數(shù)組(array):三維空間,但是極少用到,可以忽略
列表(list):三維空間,可以由多個vactor/matrix/dataframe組成

基本計算

R中可以直接進行基本計算
每一個英文單詞都是一個函數(shù)
基本所有的計算符號都可以在R中進行直接計算

6+6
6-6
6*6
6/6
6^2
log(6)
mean()
max()
min(x)

創(chuàng)建向量

c( ) 是我們常用來創(chuàng)建向量的函數(shù),c就是create,也可以理解為combind

c("TP53","ERBB2","BRCA1")
c(2,3,4)
c(2:9)
seq(1,3)#默認為整數(shù)1
seq(1,3,by=0.5)
a=c(3,4,5,6,7,8),等價于a=3:8或者a=c(3:8)或者a=seq(3,8)
【R中沒有唯一的解決代碼方案,條條大路通羅馬,找出規(guī)律,構建個人的思維習慣才是王道】

rep就是replicate重復的意思

rep(1,3)# 【1重復3次】
rep(1:2,3) #【1和2,重復3次】
rep("TP53",3)# 【TP53, 重復3次】
rep(c("TP53","ERBB2","BRCA1"),each=3)#【每個向量重復3次】
rep(c("TP53","ERBB2","BRCA1"),3)#【 重復3次】

seq就是sequence序列

seq(1,3)#默認為整數(shù)1 返回值為1,2,3
seq(1,3,by=0.5) by是設定間隔值,返回值為1, 1.5, 2, 2.5, 3
sort(a)#排序
rev(a)#反向排序
table(a)###每個變量的counts
unique(a)####顯示變量唯一的數(shù)目

sort(a)#排序
sort(a,decreasing = TRUE) #降序排序
order()得到排列的小標用,返回的是每個變量在一維向量中的排序位置編號

每個函數(shù)都有很多啞變量可以微調整,參考help文檔說明,或者TAB鍵聯(lián)想,每個調整參數(shù)之間以,分割

判斷向量類型

在預算中如果報錯,那就需要check元素類型是否不支持,as.xxxx函數(shù)可以幫助把數(shù)據(jù)變成指定類型或狀況。
class()查看數(shù)據(jù)類型
str()查看數(shù)據(jù)結構
dim()查看數(shù)據(jù)維度

is.data.frame()返回TRUE or FALSE邏輯向量
as.character()可以幫助把數(shù)據(jù)變成字符型數(shù)據(jù)(加雙引號“”的變量)

構建matrix

a<-matrix(1:20,nrow = 4,ncol =5 )
a<-matrix(1:20, 4,5 )
a<-matrix(1:20, 4)
#三者等同

構建data.frame

a<-data.frame(a=seq(1,5),b=seq(6,10))

data.frame的行和列數(shù)目必須一致,并且行名不能重復,列名可以重復

提取數(shù)據(jù)

對于向量,由于是一維結構,可以直接a[3],取向量中第3個數(shù)值
對于矩陣和數(shù)據(jù)框,由于是二維結構,需要指定二位結構
a[2,3]取數(shù)據(jù)框中的第2行、第三列的數(shù)值

data.frame默認是列為單位
可以對列進行直接操作
例如a是數(shù)據(jù)框變量
mean(a[,1])、mean(a$1) 可以直接求a的第一列的均值
但是mean(a[1,])卻不可以直接求a的某一行的均值
需要先轉換后在計算
mean(as.numeric(a[1,]))
如果添加行,則將改變所有的列。如果重新賦值,可以將a改成數(shù)據(jù)框類型。如果沒有重新賦值,則不改變a的類型。依次類推,還有as.xxx等系列函數(shù)

對list進行操作

list是三維結構,所以需要進行三維定位
例如a是list變量
a[1]則得到列表中的第一個列表,進行一次降維
a[[1]] 得到第一元素,進行了二次降維
有時候兩種方法得到的結果看起來是一樣的,可是使用class查看數(shù)據(jù)類型后發(fā)現(xiàn),其實[[]]之后已經(jīng)對數(shù)據(jù)進行了二次降級,變成了元素。

數(shù)據(jù)框取索引

通常我們想提取數(shù)據(jù)框中的指定行或者指定列
一般有兩種簡單提取思維
1)提取目標變量所在下標值(可以理解為坐標,例如第幾行)
舉例
a<-data.frame(sample=rep(c("tumor","sample"),4),age=seq(1:8))


要求1,提取sample為tumor的數(shù)據(jù)

我可以找到sample列=tumor的行號

b<-a$sample=="tumor"

注意==是邏輯判斷符號,所以返回的是邏輯性變量


image.png

然后直接導入編輯變量

tumorsample<-a[b,]
image.png

也可以一步代碼

tumorsample<-a[a$sample=='tumor',]
a<-seq(1,100)
a>2 #返回的是邏輯變量
a[a>2]#返回的是向量變量,自動過濾掉FALSE變量

體會下不同

文件讀取和保存

read.table('文件名', header = T,sep = '\t' )
read.csv('文件名', header = T )
write.table(a,file = "aa")
write.csv (a,file = "aa")

重命名

重命名行名
rownames(b)<-
colname(b)<-

尚不完善,持續(xù)更新ing

感謝jimmy和他的生信菜鳥團家族

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容