【R語言基礎】05 數據整合Ⅰ

一、數據框創建新變數

假設有MyData數據框,其中變數為x1,x2. 現創建名為sumx和meanx的新變數,分別存儲變數x1與x2的加和與均值。

#方法1

MyData$sumx <- MyData$x1 + MyData$x2MyData$meanx <- (MyData$x1 + MyData$x2)/2

#方法2

attach(MyData)MyData$sumx <- x1+x2MyData$meanx <- (x1+x2)/2detach(MyData)

#方法3(建議方法)

MyData <- transform(MyData, sumx = x1 + x2,meanx = (x1+x2)/2)

二、變數的重命名

1. 用互動式編輯器

若修改數據集x的變數名,鍵入函數fix(x),即可打開互動式編輯器界面。

score<-data.frame(student=c("A","B","C","D"),gender=c("M","M","F","F"),math=c(90,70,80,60),Eng=c(88,78,69,98),pl=c(66,59,NA,88))fix(score)score.list<-as.list(score) #將score轉化為列表fix(score.list)

(1)若數據集為矩陣或數據框

將打開「數據編輯器」,單擊要修改的變數名,在彈出的「變數編輯器」修改即可:

(2)若數據集為列表

將互動式編輯器為一個記事本,只需修改「.Names」之後對應的變數名即可:

2. 用函數rename()

reshape包中的函數rename(),用來修改數據框和列表的變數名,但不能修改矩陣的變數名,基本格式為:

rename(x, c(oldname="newname",...))

其中,oldname為原變數名,newname為新變數名。

library(reshape)rename(score,c(pl="chinese")) student gender math Eng chinese1 A M 90 88 662 B M 70 78 593 C F 80 69 NA4 D F 60 98 88rename(score.list,c(pl="chinese"))$student[1] A B C DLevels: A B C D $gender[1] M M F FLevels: F M $math[1] 90 70 80 60 $Eng[1] 88 78 69 98 $chinese[1] 66 59 NA 88

注意:原數據集中的變數名並未被修改。

3. 用函數names()

和rename()一樣可用來修改數據框和列表的變數名,不能修改矩陣的變數名;區別在於:names()會在原數據集中修改變數名。

其基本格式為: names(x)[i]<- "newname"

names(score)[5]="chinese"score student gender math Eng chinese1 A M 90 88 662 B M 70 78 593 C F 80 69 NA4 D F 60 98 88

4. 用函數colnames()和rownames()

用來修改矩陣的變數名(行名和列名),也能修改數據框的行名和列名。基本格式為:

rownames(x)[i]<- "newname"

colnames(score)[5]="Chinese"score student gender math Eng Chinese1 A M 90 88 662 B M 70 78 593 C F 80 69 NA4 D F 60 98 88rownames(score)=letters[1:4]score student gender math Eng Chinesea A M 90 88 66b B M 70 78 59c C F 80 69 NAd D F 60 98 88

三、變數的重新編碼

例如,數據集Leader中連續型變數age重新編碼為分類型變數rankAge (Young、Middle Aged、Elder)。

首先,必須把99歲的年齡值重新編碼為缺失值:

Leader$age[Leader$age == 99] <-NA

然後創建rankAge變數:

Leader$rankAge[Leader$age>75] <- "Elder"Leader$rankAge[Leader$age>=50 & Leader$age <=75] <- "Middle Aged"Leader$rankAge[Leader$age<50] <- "Young"

或者

Leader<-within(Leader, { rankAge<-NA rankAge[age>75] <- "Elder" rankAge[age>=50 & age<=75]<-"Middle Aged" rankAge[age<50] <- "Young"})

四、數據排序

1.函數sort(),基本格式:

sort(x,decreasing=FALSE,na.last= FALSE,...)

其中,

x為排序對象(數值型或字元型);

decreasing默認為FALSE即升序,TURE為降序;

na.last默認為FALSE(NA值將被刪除),若為TRUE,則將向量中的NA值放到序列末尾。

sort(score$math)[1] 60 70 80 90sort(score$math,decreasing = TRUE)[1] 90 80 70 60sort(score$Chinese,na.last = TRUE)[1] 59 66 88 NA

2.函數rank()

返回值是該向量中對應元素的秩(排名),基本格式為:

rank(x, na.last= FALSE,ties.method=...)

其中,ties.method指定對數據集中的重複數據的秩的處理方式:

「average」——取平均值秩(默認)

「first」——位於前面的數據的秩取小,依次遞增

「random」——隨機定義重複秩

「max」——取最大重複秩

「min」——取最小重複秩

x<-c(3,4,2,5,5,3,8,9)rank(x)[1] 2.5 4.0 1.0 5.5 5.5 2.5 7.0 8.0rank(x,ties.method = "first")[1] 2 4 1 5 6 3 7 8rank(x,ties.method = "random")[1] 3 4 1 6 5 2 7 8rank(x,ties.method = "max")[1] 3 4 1 6 6 3 7 8

3. 函數order()

對數據進行排序,返回值是對應「排名」的元素所在向量中的位置,即最小值、次小值、...、最大值所在的位置。基本格式為:

order(x,decreasing=FALSE,na.last= FALSE,...)

不同於前兩個函數,order()還可以對數據框進行排序:

data_frame[order(data_frame$v1,data_frame$v2, …),]

若v1值相同,則按v2升序排序;要將升序改為降序,在變數前添加負號,或用decreasing = TRUE即可。

order(score$math)[1] 4 2 3 1score[order(score$math),] student gender math Eng chinese4 D F 60 98 882 B M 70 78 593 C F 80 69 NA1 A M 90 88 66score[order(-score$math),] student gender math Eng chinese1 A M 90 88 663 C F 80 69 NA2 B M 70 78 594 D F 60 98 88

4. 函數rev()

求逆序,將序列進行反轉,即1,2,3變成3,2,1

:數據框轉置(行列交換),使用t(data)即可。

主要參考文獻:

[1] Robert I. Kabacoff著,高濤,肖楠,陳鋼譯,R語言實戰. 人民郵電出版社.

[2] 李詩羽,張飛,王正林,數據分析:R語言實戰. 電子工業出版社.

推薦閱讀:

R語言實戰(一)R語言介紹+(二)創建數據集
R語言入門與實戰:大數據人才缺口巨大,現在學習還不晚
決策樹之ID3和C4.5
為什麼R語言是當今最值得學習的數據科學語言

TAG:R编程语言 | 数据处理 |