R語言 4 資料框

2021-07-02 07:17:48 字數 4484 閱讀 5014

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...