在R語(yǔ)言中,數(shù)據(jù)框(Dataframe)是一個(gè)非常重要的數(shù)據(jù)結(jié)構(gòu),其組織數(shù)據(jù)的結(jié)構(gòu)與矩陣相似,但是其各列的數(shù)據(jù)類型可以不相同。一般情況,數(shù)據(jù)框的每列是一個(gè)變量,每行是一個(gè)觀測(cè)樣本。
雖然,數(shù)據(jù)框內(nèi)不同的列可以是不同的數(shù)據(jù)模式,但是數(shù)據(jù)框內(nèi)每列的長(zhǎng)度必須相同。
1、創(chuàng)建數(shù)據(jù)框
在R語(yǔ)言中,數(shù)據(jù)框使用data.frame()函數(shù)來(lái)創(chuàng)建,其格式如下:
data.frame(col1,col2,..., row.name=NULL, check.rows = FALSE,check.names=TRUE,stringsAsFactors = default.stringsAsFactors())
其中,row.name用于指定各行(樣本)的名稱,默認(rèn)沒(méi)有名稱,使用從1開(kāi)始自增的序列來(lái)標(biāo)識(shí)每一行;check.rows用于用來(lái)檢查行的名稱和數(shù)量是否一致,默認(rèn)為FALSE;check.names來(lái)檢查變量(列)的名稱是否唯一且符合語(yǔ)法,默認(rèn)為TRUE;用來(lái)描述是否將字符型向量自動(dòng)轉(zhuǎn)換為因子,默認(rèn)轉(zhuǎn)換,若不改變的話使用stringsAsFactors = FALSE來(lái)指定即可。
(1)df1<-data.frame(name=c("王宏", "馬蘭", "劉濤", "張峰"), sex=c("男", "女", "男", "男"), score=c(90, 85, 82, 93))
(2)df2<-data.frame(name=c("王宏", "馬蘭", "劉濤", "張峰"), sex=c("男", "女", "男", "男"), score=c(90, 85, 82, 93), row.names=c("s1", "s2", "s3", "s4"))
(3)
name <- c("王宏", "馬蘭", "劉濤", "張峰") #向量
sex <- c("男", "女", "男", "男") #向量
score <- c(90, 85, 82, 93) #向量
df3<-data.frame(name, sex, score) #使用向量生成數(shù)據(jù)框
以上的執(zhí)行情況如下圖所示,(若圖較小,可以點(diǎn)擊查看大圖)

(4)lst<-list(name=c("王宏","馬蘭","劉濤","張峰"), sex=c("男", "女", "男", "男"), score=c(90, 85, 82, 93))
df4<-as.data.frame(lst)
本部分執(zhí)行代碼如下圖所示,(若圖較小,請(qǐng)點(diǎn)擊看大圖)

(5)arr1 <- array(1:12,c(4,3))
df5 <- as.data.frame(arr1) #使用數(shù)組生成數(shù)據(jù)框
arr2<- array(1:12, c(4,3),dimnames=list(c("R1","R2","R3","R4"), c("C1","C2","C3")))
df6 <- as.data.frame(arr2)
本部分執(zhí)行情況如下圖所示:

(6) m1 <- matrix(c(1:12),nr=3)
df7<-as.data.frame(m1)
m2<-matrix(c(1:12),nr=3,dimnames=list(c("R1","R2","R3")))
df8<-as.data.frame(m2)
m3<-matrix(c(1:12),nr=3,dimnames=list(c(),c("C1","C2","C3","C4")))
df9<-as.data.frame(m3)
本部分的執(zhí)行情況如下:

在使用數(shù)組,矩陣生成數(shù)據(jù)框時(shí),若沒(méi)有指定列名,則以"V1","V2”......進(jìn)行代替。
2、數(shù)據(jù)框的引用
(1)df1["score"] #仍為一個(gè)數(shù)據(jù)框, 也是一個(gè)列表
(2)df1[,"score"] #返回的是向量
(3)df1[3] #同(1)
(4)df1[,3] #同(2)
(5)df1[c(1,3)] #返回第1列和第3列的數(shù)據(jù)
以上執(zhí)行情況如下圖所示:

(6)df1[c(1,3),] #返回第1行和第3行的數(shù)據(jù)
(7)df1[c(1,3),c(2,3)] #返回第1行和第3行與第2列和第3列交叉處的數(shù)據(jù)
(8)df1$name #以因子的形式返回name列
(9)df1[["name"]] #以因子的形式返回name列
(10)df1[[1]][1] #返回第1分量的第一個(gè)元素值,王宏
(11)df1[['name']][1] #返回name分量第一個(gè)元素值:王宏
(12)df1$name[1] #返回name分量第一個(gè)元素值:王宏
3、數(shù)據(jù)框的修改
(1)增加樣本數(shù)據(jù)或變量
可以使用rbind()函數(shù)和cbind()函數(shù)將新行或新列添加到數(shù)據(jù)框變量中。
lst1<-list("馬宇","男",92) #創(chuàng)建一個(gè)新列表
df1<-rbind(df1,lst1) #將列表lst1添加到df1中
lst2<-list(height=c(170,178,185,190,178,175)) #創(chuàng)建一個(gè)新列表,保存身高
df1<-cbind(df1,lst2) #使用cbind將lst2添加到df1中
本部分執(zhí)行情況如下圖所示:

(2)修改某列的某一個(gè)值
df1$name[1] <- "王宏偉" #將王宏的值修改為王宏偉
df1[1,2] <- "女" #將第一行第2列的值修改為“女”
df1[[1]][2]<-"馬蘭蘭" #將第一列第二個(gè)值改為“馬蘭蘭”
(3)刪除行或列
df1<-df1[-2,] #刪除第2行數(shù)據(jù)
df1<-df1[,-4] #刪除第4列的數(shù)據(jù)
df1<-df1[-c(1,3),] #刪除第1行和第3行的數(shù)據(jù)
df1<-df1[,-c(1,4)] #刪除第1列和第4列的數(shù)據(jù)
本部分(完)
新聞熱點(diǎn)
疑難解答