1、綜述
資料框可以模擬matrix,資料框可以理解為每列的mode不同的matrix;這一點很像list和向量的關係:list是mode可以不同的向量。
同時,資料框也可以和list類別,資料框的元件間的mode可以不同,list也是,但是資料框不同組建的長度必須相同,而list可以不同。因此就技術層面而言,資料框是每個元件長度都相等的列表。
2、基本操作
2.1 建立
> d<-data.frame(kids,ages,stringasfactors=false)
> kids<-c("jack","jill")
> ages<-c(12,10)
> d<-data.frame(kids,ages,stringsasfactors=false)
> d
kids ages stringasfactors
1 jack 12 false
2 jill 10 false
stringasfactors,預設值為true,表示會將string變為factor.
2.2 訪問
#方法一:採用元件的索引值
> d[[1]]
[1] "jack" "jill"
#方法二:採用元件名
> d$kids
[1] "jack" "jill"
#方法三:類似陣列的操作方式
> d[,1]
[1] "jack" "jill"
#訪問第一列
> d[1,]
kids ages
1 jack 12
2.3 使用str() 檢視資料框結構
> d
kids ages
1 jack 12
2 jill 10
> str(d)
'data.frame': 2 obs. of 2 variables:
$ kids: factor w/ 2 levels "jack","jill": 1 2
$ ages: num 12 10
2.4 資料框的拆分與組合
2.4.1 取子集合
> examsquiz
exam.1 exam.2 quiz
1 2.0 3.3 4.0
2 3.3 2.0 3.7
3 4.0 4.0 4.0
4 2.3 0.0 3.3
5 2.3 1.0 3.3
6 3.3 3.7 4.0
#方法一,取出的一列型別為向量
> examsquiz[2:5,2]
[1] 2 4 0 1
> class(examsquiz[2:5,2])
[1] "numeric"
#方法二,新增了drop=false後,取出的一列型別為data.frame
> examsquiz[2:5,2,drop=false]
exam.2
2 2
3 4
4 0
5 1
> class(examsquiz[2:5,2,drop=false])
[1] "data.frame"
#方法三,條件篩選
> examsquiz[examsquiz$exam.1>3,]
exam.1 exam.2 quiz
2 3.3 2.0 3.7
3 4.0 4.0 4.0
6 3.3 3.7 4.0
#方法四,subset()篩選函式,採用該函式篩選,會將篩選條件exam.1中含na的行自動去除掉;而上面的方法三則不能去除na> subset(examsquiz,exam.1>3)
2.3.2 組合
#rbind()函式新增行
> d
kids ages
1 jack 12
2 bill 10
> d<-rbind(d,list("tom",10))
> d
kids ages
1 jack 12
2 bill 10
3 tom 10
#注意,新增的時候,要用list("tom",10),因為,tom和10的資料型別不同。
#cbind()函式新增列
> d<-cbind(d,list(1,1,1))
> d
kids ages 1 1 1
1 jack 12 1 1 1
2 bill 10 1 1 1
3 tom 10 1 1 1
#注意,上面例子中,新增列是採用了list的形式,則新增除了,因為frame的列列內的資料型別必須相同,而list中每個元件的資料型別不同,故r自動建立了三個列,來分別放置list的三個元件。
#採用c()的時候,則只新建了一列。
> d<-cbind(d,c(1,1,1))
> d
kids ages 1 1 1 c(1, 1, 1)
1 jack 12 1 1 1 1
2 bill 10 1 1 1 1
3 tom 10 1 1 1 1
merge() 函式:根據兩個資料表中的相同的列,將兩個資料表合併到一起
#當兩個資料表中有名字相同的列時
> d1
kids states
1 jack ca
2 jill ma
3 jillian ma
4 john hi
> d2
ages kids
1 10 jill
2 7 lillian
3 12 jack
> d3<-merge(d1,d2)
> d3
kids states ages
1 jack ca 12
2 jill ma 10
#當兩個資料表中沒有名字相同的列時,
> names(d1)
[1] "kids" "states"
> names(d1)[1]<-"name"
> d1
name states
1 jack ca
2 jill ma
3 jillian ma
4 john hi
> d3<-merge(d1,d2,by.x="name",by.y="kids")
> d3
name states ages
1 jack ca 12
2 jill ma 10
2.4 na處理
2.4.1 進行函式運算時對na的處理
#函式操作時,去掉na
> x<-c(2,na,4)
> mean(x)
[1] na
> mean(x,na.rm=true)
[1] 3
2.4.2 選出不含na的frame集
#生成乙個帶有na的frame
> kids<-c('jack',na,'jillian','john')
> states<-c('ca','ma','ma',na)
> d<-data.frame(kids,states)
> d
kids states
1 jack ca
2 ma
3 jillian ma
4 john #方法一:取出不含na的行,可以通過這種方法,過濾部分列同時保留在某些列中含有na的item
> complete.cases(d)
[1] true false true false
> d2<-d[complete.cases(d),]
> d2
kids states
1 jack ca
3 jillian ma#方法二:取出不含na的行,會將所有含na的行都去除,不如方法一靈活,但很簡單省力。
> na.omit(d)
kids states
1 jack ca
3 jillian ma
R語言資料框
資料框的建立 通過data.frame函式來建立資料框,該函式包含的主要引數為 data.frame row.names null,check.rows false,check.names true,stringsasfactors default.stringsasfactors 建立乙個資料框 ...
R語言資料框
r語言學習日記 一 2019年3月30日 一 建立資料框 讀入txt csv等格式資料,自動生成資料框,資料編碼為utf 8 movie read.csv 電影資料.csv fileencoding utf 8 stringsasfactors f 檢視movie的資料型別 class movie ...
r語言 向量轉換為資料框 R語言 資料框
資料框 概念 在r語言中,資料框 dataframe 組織資料的結構與矩陣相似,但是其各列的資料型別可以不相同。一般情況,資料框的每列是乙個變數,每行是乙個觀測樣本。雖然,資料框內不同的列可以是不同的資料模式,但是資料框內每列的長度必須相同。資料框的建立 01 基本概念 在r語言中,資料框使用dat...