注意
在R中盡量使用 <- 進(jìn)行賦值, <- 更標(biāo)準(zhǔn)输涕。在R中使用 = 進(jìn)行賦值可能會(huì)出現(xiàn)錯(cuò)誤(有些函數(shù)會(huì)將其解釋為判斷)——因?yàn)镽起源于S語言音婶,S語言的定義如此。
R語言支持的數(shù)據(jù)類型
- 數(shù)值型(numeric)
- 復(fù)數(shù)型(complex)
- 邏輯型(logical)
- 字符型(character)
R語言的數(shù)據(jù)對(duì)象類型包括:
- 標(biāo)量(Scalar)
- 向量(Vector) :一個(gè)向量只能有一種數(shù)據(jù)類型
- 因子(Factor):一個(gè)因子只能有一種數(shù)據(jù)類型
- 矩陣(Matrix) :一個(gè)矩陣只能有一種數(shù)據(jù)類型
- 數(shù)組(Array) :一個(gè)數(shù)組里面的每個(gè)元素只能有一種數(shù)據(jù)類型莱坎,不同元素的類型可以不同
- 列表(List) :允許不同的數(shù)據(jù)類型
- 數(shù)據(jù)框(Data frame):不同的列的數(shù)據(jù)類型允許不同
對(duì)象的固有屬性
模式-使用mode()可以查看對(duì)象的數(shù)據(jù)類型
長(zhǎng)度-使用length()可以查看對(duì)象的長(zhǎng)度
標(biāo)量(Scalar)
標(biāo)量可以是數(shù)字衣式、字符、邏輯值等檐什。
標(biāo)量的賦值
x<-"my first R script"
y=1
z <- TRUE
結(jié)果
> x
[1] "my first R script"
> y
[1] 1
> z
[1] TRUE
向量(Vector)
向量可以由單個(gè)或多個(gè)值組成碴卧,多值的向量只能由相同類型的值組成,有一維和多維向量乃正。
向量用于存儲(chǔ)數(shù)值型住册、字符型、邏輯型數(shù)據(jù)
- 特別注意瓮具,R中的下標(biāo)(索引)不從0開始荧飞,而是從1開始
向量的建立:c()函數(shù)
a<-c(1,2,3,4,5)
> a
[1] 1 2 3 4 5
b<-c("banana","tomato","orange",1)
> b
[1] "banana" "tomato" "orange" "1" #注意 1 已經(jīng)被強(qiáng)制性變成字符類數(shù)據(jù)
c=c(TRUE,FALSE,TRUE)
> c
[1] TRUE FALSE TRUE(邏輯向量類型)
> rep(2:5,times=4) #rep()函數(shù),對(duì)一個(gè)對(duì)象重復(fù)指定的次數(shù)
[1] 2 3 4 5 2 3 4 5 2 3 4 5 2 3 4 5
year = seq(from=1995,to=2020,by=5) #seq()函數(shù)名党,通過指定開頭叹阔、結(jié)尾、步長(zhǎng)來創(chuàng)建一個(gè)向量
> year
[1] 1995 2000 2005 2010 2015 2020
>d=1:10 #指定開頭传睹、結(jié)尾耳幢,創(chuàng)建一個(gè)步長(zhǎng)為1的向量
[1] 1 2 3 4 5 6 7 8 9 10
向量的簡(jiǎn)單操作
is.na()與!is.na()
is.na()判斷是否為缺失值,返回一個(gè)邏輯性向量
> m
[1] 1 1 2 2 1 2 3 NA
> is.na(m)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
> m[is.na(m)]=0
> m
[1] 1 1 2 2 1 2 3 0
paste()
將自變量連接成一個(gè)字符串欧啤。
一般的使用形式是paste (..., sep = " ", collapse = NULL)睛藻, ... 表示想要連接的不同自變量,sep表示不同自變量之間添加的符號(hào)邢隧,collapse打開之后表示將整個(gè)自變量變成一個(gè)單一的變量
> x
[1] "block" "block" "block" "plot" "plot" "plot"
> y
[1] 1 2 3 1 2 3
> paste(x,y,sep=',')
[1] "block,1" "plot,1" "plot,2" "block,2" "plot,1" "plot,2" "plot,3"
> paste(x,y,sep='')
[1] "block1" "plot1" "plot2" "block2" "plot1" "plot2" "plot3" #將向量的不同元素進(jìn)行組合店印,sep為空。
> z=paste(x,y,sep='',collapse =',')#將整個(gè)變成了一個(gè)變量府框,其中每個(gè)元素由 , 間隔吱窝。
> z
[1] "block1,plot1,plot2,block2,plot1,plot2,plot3"
rep()
對(duì)對(duì)象進(jìn)行重復(fù)
>rep(c("xx","dsads"),5)
[1] "xx" "dsads" "xx" "dsads" "xx" "dsads" "xx" "dsads" "xx" "dsads"
>rep_len(12,5)
[1] 12 12 12 12 12
> rep(1:4,each=2) #對(duì)向量里面的每個(gè)元素重復(fù)2次
[1] 1 1 2 2 3 3 4 4
截取
- 利用索引進(jìn)行截取
> a[1] #取得向量a里面的第一個(gè)元素
[1] 1
> a[1:3]
[1] 1 2 3
> a<-seq(from=1,to=10)
> a
[1] 1 2 3 4 5 6 7 8 9 10
> a[-c(1,2,3)] #負(fù)號(hào)表示不取這個(gè)位置的元素,可以用來刪除數(shù)據(jù)
[1] 4 5 6 7 8 9 10
- 利用邏輯截取
> o=a>3
> o
[1] FALSE FALSE FALSE TRUE TRUE
> a[o]
[1] 4 5
> a[a>2] #也是利用邏輯截取
[1] 3 4 5
- 利用名字截取
> a<-c("aa"=1,"bb"=2,"cc"=3)#可以對(duì)向量中的元素賦予名字
> a
aa bb cc
1 2 3
> letters[1:5] #letters 是R自帶的存儲(chǔ)了字母的一個(gè)向量
[1] "a" "b" "c" "d" "e"
> names(a)<-letters[4:6] #對(duì)向量a的數(shù)據(jù)進(jìn)行命名
> a
d e f <NA> <NA>
1 2 3 4 5
> a["d"]
d
1
向量的計(jì)算
> length(a)#向量長(zhǎng)度
[1] 5
> mean(a)#向量的平均值
[1] 3
> median(a)#向量的中位數(shù)
[1] 3
> sd(a)#標(biāo)準(zhǔn)差的計(jì)算
[1] 1.581139
>var(a) #方差的計(jì)算
> a[1:3]-a[2:4]#注意迫靖,它是對(duì)兩個(gè)向量的元素進(jìn)行一一對(duì)應(yīng)的計(jì)算
[1] -1 -1 -1
> (a[1:5]-10)*2
[1] -18 -16 -14 -12 -10
>a<-seq(from=1,to=5,by=1)
>b<-seq(from=1,to=10,by=1)
>a-b
[1] 0 0 0 0 0 -5 -5 -5 -5 -5 #因?yàn)閍和b的長(zhǎng)度不同,它們兩個(gè)在進(jìn)行計(jì)算的時(shí)候兴使,會(huì)把比較短的a的元素重復(fù)利用
#另外系宜,符號(hào)%/%表示整數(shù)除法,%%表示求余數(shù)
#R軟件還可以作函數(shù)運(yùn)算发魄,例如基本初等函數(shù)log(), exp(), cos(), tan(), sqrt()等盹牧。當(dāng)自變量為向量時(shí)俩垃,返回值也為向量,長(zhǎng)度和自變量長(zhǎng)度一致汰寓,每個(gè)分量取相應(yīng)的函數(shù)值
簡(jiǎn)單判斷
> all(a>1) #判斷是否向量所有元素都大于1
[1] FALSE
> any(a>1) #判斷向量是否有一個(gè)元素大于1
[1] TRUE
因子(Factor)
在統(tǒng)計(jì)學(xué)中口柳,按照變量值是否連續(xù)把變量分為連續(xù)變量與離散變量?jī)煞N。分類變量是說明事物類別的一個(gè)名稱有滑,其取值是分類數(shù)據(jù)跃闹。變量值是定性的,表現(xiàn)為互不相容的類別或?qū)傩悦谩R蜃泳褪且活惙诸愲x散變量望艺。
因子是帶有水平(level)的向量。
因子的建立(factor)
factor()函數(shù)一般形式為:
Factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)
#其中肌访,x是向量找默;levels是水平,可以自行制定各離散取值吼驶,默認(rèn)取x的不同水平值惩激;
# labels用來指定各水平的標(biāo)簽,默認(rèn)用各離散取值的對(duì)應(yīng)字符串蟹演;
# exclude參數(shù)用來指定要轉(zhuǎn)化為缺失值(NA)的元素值集合风钻,如果指定了levels,則當(dāng)因子的第i個(gè)元素等于水平中的第j個(gè)元素時(shí)轨帜,元素值取”j”魄咕,如果它的值沒有出現(xiàn)在levels中,則對(duì)應(yīng)因子元素取NA蚌父;
# ordered取值為真(TRUE)時(shí)哮兰,表示因子水平是有次序的(按編碼次序),否則(默認(rèn)值)是無次序的苟弛。
#可以用is.factor()檢驗(yàn)對(duì)象是否是因子喝滞,用as.factor()把一個(gè)向量轉(zhuǎn)化成一個(gè)因子
> numbers<- c("aa","bb","cc","aa","aa","bb")
> numbers<-factor(numbers)#將向量轉(zhuǎn)換為因子
> numbers
[1] aa bb cc aa aa bb
Levels: aa bb cc
因子的簡(jiǎn)單操作
unique()函數(shù)
可以用來篩選因子的level
> x
[1] "a1" "a2" "a3" "a4" "a1" "a2" "a1"
> unique(x) #取得x中不重復(fù)的值
[1] "a1" "a2" "a3" "a4"
- 有序的因子level
> numbers<-factor(numbers,order=TRUE,levels=c("aa","bb","cc"))#有順序且指定其factor順序
> numbers
[1] aa bb cc aa aa bb
Levels: aa < bb < cc
> nlevels(numbers)#返回因子的水平數(shù)
[1] 3
> levels(numbers)#返回不同因子對(duì)應(yīng)的值
[1] "aa" "bb" "cc"
table()函數(shù)
Table()函數(shù)對(duì)應(yīng)的就是統(tǒng)計(jì)學(xué)中的列聯(lián)表,是一種記錄頻數(shù)的方法膏秫。對(duì)于因子向量右遭,可用函數(shù)table()來統(tǒng)計(jì)各類數(shù)據(jù)的頻率。Table()的結(jié)果是一個(gè)帶元素名的向量缤削,元素名為因子水平窘哈,元素值為該水平的出現(xiàn)頻率。
> plot.data #其中plot1和plot2都是因子類型
plot1 plot2
1 長(zhǎng)白落葉松 水曲柳
2 紅松 水曲柳
3 紅松 水曲柳
4 白樺 黃菠蘿
5 長(zhǎng)白落葉松 水曲柳
> table(plot.data)
plot2
plot1 黃菠蘿 水曲柳
長(zhǎng)白落葉松 0 2
紅松 0 2
云杉 0 0
白樺 1 0
黃菠蘿 0 0
水曲柳 0 0
tapply() 函數(shù)
tapply()是對(duì)向量中的數(shù)據(jù)進(jìn)行分組處理亭敢,而非對(duì)整體數(shù)據(jù)進(jìn)行處理滚婉。函數(shù)一般形式為:
tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)
#其中,X是一個(gè)對(duì)象帅刀,通常是一個(gè)向量让腹;
# INDEX是與X有同樣長(zhǎng)度的因子远剩,表示按INDEX中的值分組,把相同值對(duì)應(yīng)下標(biāo)的X (array)中的元素形成一個(gè)集合骇窍,應(yīng)用到需要計(jì)算的函數(shù)FUN瓜晤。
#如果FUN返回的是一個(gè)值,tapply返回向量(vector)腹纳;若FUN返回多個(gè)值痢掠,tapply返回列表(list)。vector或list的長(zhǎng)度和INDEX的長(zhǎng)度相等只估。
# simplify是邏輯變量志群,取為TRUE(默認(rèn))時(shí)tapply返回vector,F(xiàn)ALSE時(shí)返回list蛔钙。
#當(dāng)FUN為NULL的時(shí)候锌云,返回一個(gè)長(zhǎng)度和X中元素個(gè)數(shù)相等的vector,指示分組的結(jié)果吁脱,vector中相等的元素所對(duì)應(yīng)的下標(biāo)屬于同一組桑涎。
> plot.data
SP p D
1 長(zhǎng)白落葉松 plot1 20.5
2 紅松 plot1 10.3
3 紅松 plot1 16.7
4 白樺 plot1 25.4
5 長(zhǎng)白落葉松 plot1 22.6
6 水曲柳 plot2 17.4
7 水曲柳 plot2 15.3
8 水曲柳 plot2 20.6
9 黃菠蘿 plot2 23.5
10 水曲柳 plot2 12.9
> tapply(plot.data$D,plot.data$SP,mean) #計(jì)算每個(gè)樹種的平均直徑
白樺 紅松 黃菠蘿 水曲柳 長(zhǎng)白落葉松
25.40 13.50 23.50 16.55 21.55
#這是一個(gè)非常有用的函數(shù),可以很輕松的對(duì)一些數(shù)據(jù)進(jìn)行簡(jiǎn)單的統(tǒng)計(jì)分析
gl() 函數(shù)
gl()函數(shù)可以方便地產(chǎn)生因子兼贡,函數(shù)一般形式為:
gl(n,k,length=n*k,labels=1:n,ordered=FALSE)
#其中攻冷,n為水平數(shù);
#k為單個(gè)水平數(shù)的重復(fù)次數(shù)遍希;length為產(chǎn)生的因子長(zhǎng)度等曼,默認(rèn)為n*k;
#labels是一個(gè)n維向量凿蒜,表示因子水平數(shù)禁谦;
#ordered 是邏輯變量,表示是否為有序因子废封,默認(rèn)值為FALSE州泊。
> gl(4,2) #產(chǎn)生水平數(shù)為1:4,每個(gè)水平數(shù)重復(fù)2次
[1] 1 1 2 2 3 3 4 4
Levels: 1 2 3 4
矩陣(Matrix)
矩陣是一個(gè)二維數(shù)組漂洋,只是每個(gè)元素都擁有相同的數(shù)據(jù)類型(數(shù)值型遥皂、字符型或邏輯型)。注意與數(shù)據(jù)框的差別刽漂,數(shù)據(jù)框不同列的數(shù)據(jù)類型可以不同演训。
矩陣的建立(matrix)
函數(shù)matrix ()是構(gòu)造矩陣(二維數(shù)組)的函數(shù),其構(gòu)造形式為:
matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
#其中贝咙,data是一個(gè)向量數(shù)據(jù)仇祭;
#nrow是矩陣的行數(shù);
#ncol是矩陣的列數(shù)颈畸;
#nrow與ncol的乘積需等于data向量的長(zhǎng)度
#當(dāng)byrow=TRUE時(shí)乌奇,生成矩陣的數(shù)據(jù)按行放置,默認(rèn)值byrow=FALSE眯娱,數(shù)據(jù)按列放置礁苗;
#dimnames是數(shù)組維的名字,默認(rèn)值為空徙缴∈曰铮可以輸入包含行名,列名的一個(gè)list對(duì)數(shù)值行名于样、列名進(jìn)行命名
> col_name=c("A","B","C")#編輯列名
> row_name=c("M","N")#行名
> y=matrix(1:6,nrow=2,ncol=3,byrow=TRUE,dimnames = list(row_name,col_name))
#nrow行數(shù)疏叨,ncol列數(shù),byrow按行排列穿剖,dimnames對(duì)行和列進(jìn)行命名
> y
A B C
M 1 2 3
N 4 5 6
> y1=t(y) #對(duì)y進(jìn)行轉(zhuǎn)置蚤蔓,好像列名和行名也發(fā)生了變化
> y1
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
矩陣索引
#使用行、列下標(biāo)來索引糊余。
> a[3,2]
[1] 8
#使用行和列名稱來索引秀又。
> a["r3","c2"]
[1] 8
#使用一維下標(biāo)來索引。
> a[1,]#以向量形式返回矩陣a第一行的所有元素
c1 c2
1 6
> a[,1]#以向量形式返回矩陣a第一列的所有元素
r1 r2 r3 r4 r5
1 2 3 4 5
矩陣編輯
- 矩陣合并
rbind()函數(shù):通過行合并函數(shù)將多個(gè)已有向量合并成矩陣贬芥,同樣還有cbind()吐辙。它們對(duì)行數(shù)或者列數(shù)是有要求的。rbind():兩個(gè)向量/矩陣的列數(shù)需一致蘸劈,cbind():兩個(gè)向量/矩陣的行數(shù)需一致昏苏。
> x1<-c(1:5);
> x2<-c(6:10);
> rbind(x1,x2)
[,1] [,2] [,3] [,4] [,5]
x1 1 2 3 4 5
x2 6 7 8 9 10
- 刪除矩陣內(nèi)元素
刪除矩陣內(nèi)某行和某列的方式類似于向量,實(shí)質(zhì)是對(duì)向量/矩陣重新賦值
> a<-a[-1,] #刪除第一行的元素
矩陣的運(yùn)算
> rowSums(y) #行的和威沫。colSums():列的和
[1] 6 15
> mean(y1[,2]) #對(duì)某一列進(jìn)行平均值的計(jì)算
[1] 5
- 矩陣的加減法
> A<-matrix(c(1:12),nrow=4,ncol=3);
> B<-matrix(c(4:15),nrow=4,ncol=3,byrow=T);
> A+B
[,1] [,2] [,3]
[1,] 5 10 15
[2,] 9 14 19
[3,] 13 18 23
[4,] 17 22 27
- 矩陣各元素的乘法(A*B)
> A*B
[,1] [,2] [,3]
[1,] 4 25 54
[2,] 14 48 90
[3,] 30 77 132
[4,] 52 112 180
- 矩陣的乘法(A%*%B)贤惯,注意與矩陣各元素的乘法之間的差別
> A<-matrix(c(1:12),nrow=4,ncol=3)
> C<-matrix(c(12:1),nrow=3,ncol=4)
> A%*%C
[,1] [,2] [,3] [,4]
[1,] 157 112 67 22
[2,] 190 136 82 28
[3,] 223 160 97 34
[4,] 256 184 112 40
- 轉(zhuǎn)置運(yùn)算
> t(A) #利用t(A)函數(shù)對(duì)矩陣A進(jìn)行轉(zhuǎn)置
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
- 求方陣的行列式,注意是方陣(即行與列的數(shù)量一樣)
> A
[,1] [,2]
[1,] 1 3
[2,] 2 4
> det(A)#利用det(A)函數(shù)求方陣A的行列式的值壹甥。
[1] -2
- 向量的內(nèi)積:
對(duì)于n維向量x救巷,可以看成n1階矩陣或1n階矩陣。若x與y是相同維數(shù)的向量句柠,則x%%y表示x與y作內(nèi)積
函數(shù)crossprod()是內(nèi)積運(yùn)算函數(shù)(表示交叉乘積)浦译,crossprod(x,y)計(jì)算向量x與y的內(nèi)積,即”t(x)%%y”溯职。crossprod(x)表示x與x的內(nèi)積
類似地精盅,函數(shù)tcrossprod(x,y)表示”x%*%t(y)”,即x與y的外積。
> x<-1:4
> y<-2*1:4
> x%*%y
[,1]
[1,] 60
- 向量的外積
設(shè)x,y是n維向量谜酒,則x%o%y表示x與y作外積
函數(shù)outer()是外積運(yùn)算函數(shù)叹俏,outer(x,y)計(jì)算向量x與y的外積,它等價(jià)于x%o%y。
> x<-1:4
> y<-2*1:4
> x%o%y
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 4 8 12 16
[3,] 6 12 18 24
[4,] 8 16 24 32
- 求矩陣的逆矩陣
求矩陣A的逆僻族,命令形式為solve(A)
> A
[,1] [,2]
[1,] 1 3
[2,] 2 4
> solve(A)
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
- 求矩陣的特征值和特征向量
求矩陣A的特征值和特征向量粘驰,命令形式為eigen(A)
> A<-matrix(c(1:4),nrow=2,ncol=2);
> a<-eigen(A)
> a
eigen() decomposition
$`values`
[1] 5.3722813 -0.3722813
$vectors
[,1] [,2]
[1,] -0.5657675 -0.9093767
[2,] -0.8245648 0.4159736
- 矩陣的奇異值分解
函數(shù)svd(A)是對(duì)矩陣A作奇異值分解屡谐,即A=UDVT ,其中U,V是正交陣蝌数,D為對(duì)角陣愕掏,也就是矩陣A的奇異值。svd(A)的返回值也是列表顶伞,svd(A)u對(duì)應(yīng)的是正交陣U,svd(A)$v對(duì)應(yīng)的是正交陣V唆貌。
> A<-matrix(c(1:4),nrow=2,ncol=2);
> svd(A)
$`d`
[1] 5.4649857 0.3659662
$u
[,1] [,2]
[1,] -0.5760484 -0.8174156
[2,] -0.8174156 0.5760484
$v
[,1] [,2]
[1,] -0.4045536 0.9145143
[2,] -0.9145143 -0.4045536
- apply()函數(shù)
apply()函數(shù)可以讀取多維數(shù)組中某個(gè)維度的所有數(shù)據(jù)并應(yīng)用其它函數(shù)進(jìn)行數(shù)據(jù)處理滑潘。apply(x,MARGIN,FUN),x多維數(shù)組array,MARGIN預(yù)處理的維數(shù)(MARGIN=2代表對(duì)象為列,=1的話則為行),FUN多維數(shù)組中某一維度元素的處理函數(shù)(FUN=sd表示計(jì)算標(biāo)準(zhǔn)差锨咙,=sum的話表示計(jì)算和语卤,只要有定義了的函數(shù),便可以拿過來用)
> apply(y,MARGIN=2,FUN=sd)
[1] 2.12132 2.12132 2.12132
數(shù)組(array)
數(shù)組與矩陣類似蓖租,但是維度可以大于2唬滑。數(shù)組有一個(gè)特征屬性叫做維數(shù)向量(dim屬性)西土,維數(shù)向量是一個(gè)元素取正整數(shù)值的向量,其長(zhǎng)度是數(shù)組的維數(shù),比如維數(shù)向量有兩個(gè)元素時(shí)數(shù)組為二維數(shù)組(矩陣)壮锻。維數(shù)向量的每一個(gè)元素指定了該下標(biāo)的上界隆夯,下標(biāo)的下界總為1宝穗。
數(shù)組的建立(array)
R軟件可以用array()函數(shù)直接構(gòu)造數(shù)組次哈,其構(gòu)造形式為:
Array(data=NA, dim=length(data),dimnames=NULL)
#其中,data是一個(gè)向量數(shù)據(jù)睬关;
#dim是數(shù)組各維的長(zhǎng)度诱担,默認(rèn)值為原向量的長(zhǎng)度;dimnames是數(shù)組維的名字电爹,默認(rèn)值為空蔫仙。
> dim1=c("A1","A2")
> dim2=c("B1","B2","B3")
> dim3=c("C1","C2")
> z=array(1:12,c(2,3,2),dimnames = list(dim1,dim2,dim3))
#創(chuàng)立一個(gè)三維的數(shù)組,dimnames對(duì)名字進(jìn)行命名
> z
, , C1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , C2
B1 B2 B3
A1 7 9 11
A2 8 10 12
數(shù)據(jù)框(Data frame)
數(shù)據(jù)框與矩陣類似丐箩,為二維摇邦,其數(shù)據(jù)框中各列的數(shù)據(jù)類型可以不同,但是長(zhǎng)度必須一樣屎勘。數(shù)據(jù)框在生物數(shù)據(jù)中用得比較多施籍,是非常重要的一類數(shù)據(jù)類型。
數(shù)據(jù)框與矩陣不同的是數(shù)據(jù)框不同的列可以是不同的數(shù)據(jù)類型概漱,并且數(shù)據(jù)框假定每列是一個(gè)變量丑慎,每行是一個(gè)觀測(cè)值。
作為數(shù)據(jù)框變量的向量、因子或矩陣必須具有相同的長(zhǎng)度(行數(shù))竿裂。數(shù)據(jù)框可以用data.frame()函數(shù)生成玉吁,其用法與list()函數(shù)相同。
data.frame(col1,col2,col3.....)其中列向量col1,col2等可以是任何類型的向量
> patientID<-c(1,2,3,4)
> age<-c(22,13,42,21)
> diabetes<-c("t1","t2","t3","t4")
> status=c("poor","improved","poor","excellent")
> status=factor(status,order=TRUE,levels=c("poor","improved","excellent"))
> patientData<-data.frame(patientID,age,diabetes,status)
> patientData
patientID age diabetes status
1 1 22 t1 poor
2 2 13 t2 improved
3 3 42 t3 poor
4 4 21 t4 excellent
#實(shí)例標(biāo)識(shí)符可以通過數(shù)據(jù)框操作函數(shù)中的rowname選項(xiàng)指定
數(shù)據(jù)框的簡(jiǎn)單操作
> head(mtcars)#顯示文件的前幾行铛绰。tail()顯示文件的后幾行
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
> colnames(mtcars) #顯示文件的列名诈茧。rownames()顯示文件的行名
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
> nrow(mtcars)#顯示文件的行數(shù)。#ncol()顯示文件的列數(shù)
[1] 32
> dim(mtcars)#顯示文件的行數(shù)和列數(shù)
[1] 32 11
> str(patientData)#顯示每一行數(shù)據(jù)類型捂掰,str()函數(shù)可以提供R中某個(gè)對(duì)象的信息
'data.frame': 4 obs. of 4 variables:
$ patientID: num 1 2 3 4
$ age : num 22 13 42 21
$ diabetes : Factor w/ 4 levels "t1","t2","t3",..: 1 2 3 4
$ status : Ord.factor w/ 3 levels "poor"<"improved"<..: 1 2 1 3
> summary(patientData)#顯示一些集合信息,顯示對(duì)象的統(tǒng)計(jì)概要
patientID age diabetes status
Min. :1.00 Min. :13.0 t1:1 poor :2
1st Qu.:1.75 1st Qu.:19.0 t2:1 improved :1
Median :2.50 Median :21.5 t3:1 excellent:1
Mean :2.50 Mean :24.5 t4:1
3rd Qu.:3.25 3rd Qu.:27.0
Max. :4.00 Max. :42.0
> patientName<-c("jane","amy","jimy","cool")
> patientChracter<-c("tall","short","very tall","prety tall")
> patientData2<-data.frame(patientName,patientChracter)
> patientData2
patientName patientChracter
1 jane tall
2 amy short
3 jimy very tall
4 cool prety tall
> cbind(patientData,patientData2)#將兩個(gè)數(shù)據(jù)框按列合在一起曾沈。rbind按行这嚣。merge
patientID age diabetes status patientName patientChracter
1 1 22 t1 poor jane tall
2 2 13 t2 improved amy short
3 3 42 t3 poor jimy very tall
4 4 21 t4 excellent cool prety tall
cor(mtcars)#數(shù)據(jù)相關(guān)系數(shù)的計(jì)算
數(shù)據(jù)框數(shù)據(jù)的篩選
- 索引篩選
> patientData[1:2,]#提取前兩行。
patientID age diabetes status
1 1 22 t1 poor
2 2 13 t2 improved
> patientData[,2:3]#提取后兩列
age diabetes
1 22 t1
2 13 t2
3 42 t3
4 21 t4
> patientData[c(1,2),c(1,3)]#提取4個(gè)數(shù)據(jù)
patientID diabetes
1 1 t1
2 2 t2
- 名稱篩選
> patientData[,c("diabetes","status")]#按列名來提取數(shù)據(jù)
diabetes status
1 t1 poor
2 t2 improved
3 t3 poor
4 t4 excellent
> patientData$diabetes# $ 符號(hào)的使用:提取"diabetes"列,因子類型輸出
[1] t1 t2 t3 t4
Levels: t1 t2 t3 t4
> patientData[,c("diabetes"),drop=FALSE]#提取diabetes列塞俱,仍是數(shù)據(jù)框輸出
diabetes
1 t1
2 t2
3 t3
4 t4
- 邏輯篩選
> interestCol<-colnames(patientData)%in%c("diabetes")#判斷哪一列是diabetes
> interestCol#邏輯向量輸出(TRUE/FALSE)
[1] FALSE FALSE TRUE FALSE
> patientData[,interestCol]#篩選出"diabetes"兩列
[1] t1 t2 t3 t4
Levels: t1 t2 t3 t4
> patientData[patientData$age>20,]#篩選出"age"大于20的行
patientID age diabetes status
1 1 22 t1 poor
3 3 42 t3 poor
4 4 21 t4 excellent
- subset篩選
> subset(patientData,age>20 & patientID>2)
patientID age diabetes status
3 3 42 t3 poor
4 4 21 t4 excellent
排序 order
> orderIndex<-order(patientData[,1],decreasing = TRUE)#第一列排序好的索引
> orderIndex
[1] 4 3 2 1
> patientData[orderIndex,]#按第一列大小排好序
patientID age diabetes status
4 4 21 t4 excellent
3 3 42 t3 poor
2 2 13 t2 improved
1 1 22 t1 poor
列表(List)
列表可以儲(chǔ)存不同類型的數(shù)據(jù)姐帚,是一些對(duì)象的有序集合。它的元素也由序號(hào)(下標(biāo))區(qū)分障涯,但是各元素的類型可以是任意對(duì)象罐旗,不同元素不必是同一類型。元素本身允許是其他復(fù)雜數(shù)據(jù)類型唯蝶。比如一個(gè)列表的元素也允許是一個(gè)列表九秀。
R軟件中利用函數(shù)list()構(gòu)造列表,一般語法為:
Lst<-list(name_1=object_1,…, name_1=object_m)
其中name是列表元素的名稱粘我;object_i(i=1,…,m)是列表元素的對(duì)象鼓蜒。
列表的建立
> a<-list("a"=11111,"b"=c(1,2,3,4,5),c=matrix(1:6,nrow = 2))
> a
$`a`
[1] 11111
$b
[1] 1 2 3 4 5
$c
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> d=c(1,4,2,2)
> e=matrix(1:12,nrow=2,ncol=6)
> f=patientData
> mylist<-list(d,e,f)
> mylist
[[1]]
[1] 1 4 2 2
[[2]]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 3 5 7 9 11
[2,] 2 4 6 8 10 12
[[3]]
patientID age diabetes status
1 1 22 t1 poor
2 2 13 t2 improved
3 3 42 t3 poor
4 4 21 t4 excellent
列表數(shù)據(jù)的提取
> names(mylist)<-c("m","n","q")#對(duì)mylist里面的元素進(jìn)行命名
> names(mylist)
[1] "m" "n" "q"
#要注意不同的訪問方法產(chǎn)生的數(shù)據(jù)類型可能不一樣
> names(mylist)
[1] "m" "n" "q"
> mylist["m"]#訪問list元素方法,得到$m
$m
[1] 1 4 2 2
> mylist$m#訪問list元素方法,得到$m
$m
> mylist[1]#得到$m
$m
[1] 1 4 2 2
> mylist[[1]]#得到原本的數(shù)據(jù)類型,即d(向量)的數(shù)據(jù)類型
[1] 1 4 2 2
> mylist[["m"]]#得到原本的數(shù)據(jù)類型
[1] 1 4 2 2
unlist()函數(shù):將list函數(shù)拉直成一個(gè)向量
> data.list
[[1]]
[1] 1 1 1 1 1 1 1 2 2 2 2 2 2 2
[[2]]
[1] "單木1" "單木2" "單木3" "單木4" "單木5" "單木6" "單木7" "單木1" "單木2" "單木3" "單木4" "單木5" "單木6" "單木7"
[[3]]
[1] "長(zhǎng)白落葉松" "紅松" "紅松" "白樺" "長(zhǎng)白落葉松" "白樺" "紅松" "水曲柳" "水曲柳"
[10] "水曲柳" "黃菠蘿" "水曲柳" "黃菠蘿" "水曲柳"
[[4]]
[1] "26.4" "18.4" "22.3" "27.1" "27.5" "15.2" "20.3" "18.5" "16.3" "21.4" "21.7" "14.3" "17.9" "20.8"
$H2
[1] 1.885714 1.314286 1.592857 1.935714 1.964286 1.085714 1.450000 1.321429 1.164286 1.528571 1.550000 1.021429 1.278571
[14] 1.485714
> unlist(data.list)#會(huì)將list整個(gè)拉直成為一個(gè)向量》
"1" "1" "1" "1" "1" "1"
"1" "2" "2" "2" "2" "2"
"2" "2" "單木1" "單木2" "單木3" "單木4"
"單木5" "單木6" "單木7" "單木1" "單木2" "單木3"
"單木4" "單木5" "單木6" "單木7" "長(zhǎng)白落葉松" "紅松"
"紅松" "白樺" "長(zhǎng)白落葉松" "白樺" "紅松" "水曲柳"
"水曲柳" "水曲柳" "黃菠蘿" "水曲柳" "黃菠蘿" "水曲柳"
"26.4" "18.4" "22.3" "27.1" "27.5" "15.2"
"20.3" "18.5" "16.3" "21.4" "21.7" "14.3"
H21 H22 H23 H24
"17.9" "20.8" "1.88571428571429" "1.31428571428571" "1.59285714285714" "1.93571428571429"
H25 H26 H27 H28 H29 H210
"1.96428571428571" "1.08571428571429" "1.45" "1.32142857142857" "1.16428571428571" "1.52857142857143"
H211 H212 H213 H214
"1.55" "1.02142857142857" "1.27857142857143" "1.48571428571429"