生信技能樹數(shù)據(jù)挖掘課程學(xué)習(xí)筆記
二、數(shù)據(jù)類型和向量
數(shù)據(jù)類型
- 數(shù)值型numeric:1.3、2
- 字符型 character:“a”、‘nn’
- 邏輯型 logical :TRUE T、FALSE F、NA
判斷數(shù)據(jù)類型的函數(shù):class( ),將要判斷的內(nèi)容寫在括號(hào)里,常見報(bào)錯(cuò):引號(hào)、拼寫錯(cuò)誤、大小寫
邏輯型數(shù)據(jù)
比較運(yùn)算的結(jié)果是邏輯值 >, <, <=, >=, == , !=
邏輯運(yùn)算 多個(gè)邏輯條件的連接與&、或|、非!
數(shù)據(jù)類型的判斷和轉(zhuǎn)換
is族函數(shù),判斷,返回值為TRUE或FALSE
is.numeric() 是否數(shù)值型數(shù)據(jù)
is.logical() 是否邏輯型數(shù)據(jù)
is.charactor() 是否字符型數(shù)據(jù)
as族函數(shù)實(shí)現(xiàn)數(shù)據(jù)類型之間的轉(zhuǎn)換
as.numeric() 將其他數(shù)據(jù)類型轉(zhuǎn)換為數(shù)值型
as.logical() 將其他數(shù)據(jù)類型轉(zhuǎn)換為邏輯型
as.charactor() 將其他數(shù)據(jù)類型轉(zhuǎn)換為字符型
多個(gè)數(shù)據(jù)如何組織?
數(shù)據(jù)結(jié)構(gòu): 向量 、數(shù)據(jù)框、矩陣、列表
數(shù)據(jù)框約等于“表格”。
向量則是數(shù)據(jù)框單獨(dú)拿出的一列,視為一個(gè)整體。
一個(gè)向量只能有一種數(shù)據(jù)類型,可以有重復(fù)值。
2.1向量的生成
(1)用 c()逐一放到一起
(2)連續(xù)的數(shù)字用冒號(hào)”:”
(3)有重復(fù)的用rep(),有規(guī)律的序列用seq(),隨機(jī)數(shù)用rnorm
(4)通過組合,產(chǎn)生更為復(fù)雜的向量。 paste0(rep("gene",times=3),1:3)
2.2 對(duì)單個(gè)向量進(jìn)行的操作
(1)賦值給一個(gè)變量名 = 隨意寫法 <- 規(guī)范的賦值符號(hào)
(2)簡(jiǎn)單數(shù)學(xué)計(jì)算
(3)根據(jù)某條件進(jìn)行判斷,生成邏輯值向量
(4)初級(jí)統(tǒng)計(jì) :max(x) 最大值、min(x) 最小值、mean(x) 均值、
? median(x) 中位數(shù)、var(x) 方差、sd(x) 標(biāo)準(zhǔn)差、sum(x) 總和
2.3.對(duì)兩個(gè)向量的操作
(1)邏輯比較,生成等長(zhǎng)的邏輯向量
x = c(1,3,5,1)
y = c(3,2,5,6)
x == y
[1] FALSE FALSE TRUE FALSE
x %in% y #x的元素是否在y中
[1] FALSE TRUE TRUE FALSE
(2)數(shù)學(xué)計(jì)算 x+y [1] 4 5 10 7
(3)連接 paste(x,y,sep=":") [1] "1:3" "3:2" "5:5" "1:1"
(4)交集、并集、差集 intersect(x,y)、union(x,y)、setdiff(x,y) #x里面有的,y沒有的
(5)x 和 y不一樣長(zhǎng):理解一下循環(huán)補(bǔ)齊 x==y 短的循環(huán)補(bǔ)齊,與前后沒有關(guān)系
paste0(rep(“gene”,3),1:3)
paste0(“gene”,1:3)
與向量x等長(zhǎng)的邏輯值可以如何生成? A、比較運(yùn)算 B、x %in% y C、用返回結(jié)果是邏輯值向量的函數(shù)
2.4.向量篩選(取子集)[]
根據(jù)邏輯值、根據(jù)位置
2.5 如何修改向量中的某個(gè)/某些元素
取子集+賦值
2.6 簡(jiǎn)單向量作圖
k1 = rnorm(12)
k2 = rep(c("a","b","c","d"),each = 3)
plot(k1)
boxplot(k1~k2)
向量的幾個(gè)進(jìn)階小問題
1.兩個(gè)不同類型的向量合并在一起會(huì)怎么樣?
2.如何將兩個(gè)向量合到一起,組成一個(gè)長(zhǎng)向量?
x=c(1,3,5) y=c(2,3,4) test=c(x,y) test ## [1] 1 3 5 2 3 43.如何在向量首/尾/中間某位置增加一個(gè)元素?
x=c(3,x) x=c(x,4)如何在向量第n位增加一個(gè)元素?
n=3 x=c(1,3,5,8,6) x ## [1] 1 3 5 8 6 y=c(x[1:n-1],7,x[n:length(x)]) y ## [1] 1 3 7 5 8 6寫成函數(shù)
join <- function(x,n,y){ c(x[1:n-1],y,x[n:length(x)]) } x=c(1,3,5,8,6) join(x,3,7) ## [1] 1 3 7 5 8 64.如果向量x和y內(nèi)容一致但順序不一致,如何按照x的順序排列y?
x=letters[1:5] y=letters[c(3,1,2,5,4)] match(x,y) ## [1] 2 3 1 5 4 y[match(x,y)] ## [1] "a" "b" "c" "d" "e"
向量排序-match、rank、order、sort、rev
- sort 從小到大
- rev 倒序排列
- rank 返回秩次
- order 從小到大的值的位置(最小的值在哪個(gè)位置,次小的又在哪個(gè))
- match(x,y)按照x的順序來(lái)排y