R語言數(shù)據(jù)對(duì)象類型

注意

在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)d表示矩陣A的奇異值饵撑,即矩陣D的對(duì)角線上的元素。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" 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末征字,一起剝皮案震驚了整個(gè)濱河市都弹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匙姜,老刑警劉巖畅厢,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異氮昧,居然都是意外死亡框杜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門郭计,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霸琴,“玉大人,你說我怎么就攤上這事昭伸∥喑耍” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)选调。 經(jīng)常有香客問我夹供,道長(zhǎng),這世上最難降的妖魔是什么仁堪? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任哮洽,我火速辦了婚禮,結(jié)果婚禮上弦聂,老公的妹妹穿的比我還像新娘鸟辅。我一直安慰自己,他們只是感情好莺葫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布匪凉。 她就那樣靜靜地躺著,像睡著了一般捺檬。 火紅的嫁衣襯著肌膚如雪再层。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天堡纬,我揣著相機(jī)與錄音聂受,去河邊找鬼。 笑死烤镐,一個(gè)胖子當(dāng)著我的面吹牛蛋济,可吹牛的內(nèi)容都是我干的职车。 我是一名探鬼主播瘫俊,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼茫孔!你這毒婦竟也來了锣咒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤悼嫉,失蹤者是張志新(化名)和其女友劉穎蹋凝,沒想到半個(gè)月后仙粱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡白群,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年尚胞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帜慢。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笼裳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粱玲,到底是詐尸還是另有隱情躬柬,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布抽减,位于F島的核電站允青,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏卵沉。R本人自食惡果不足惜颠锉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望史汗。 院中可真熱鬧琼掠,春花似錦、人聲如沸停撞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至速挑,卻和暖如春谤牡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姥宝。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工翅萤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腊满。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓套么,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親碳蛋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胚泌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容