数据合并与排序

2018-08-31

2018-08-31
数据合并与排序

1 数据获取


  R数据集的获取,分为外部导入和内部获取。以下在数据合并中会对两种方法进行展示。用data()函数能调出R中含有的自带数据集,选择R自带的state.area数据进行读取,如下所示:

state.area=data.frame(state.area)
str(state.area) # 浏览state.area数据结构信息
## 'data.frame':    50 obs. of  1 variable:
##  $ state.area: num  51609 589757 113909 53104 158693 ...

  通过读取R自带的state.area数据,可以得到数据集中变量情况,数据中含有50条数据,1个变量。

state.area=data.frame(state.name)
str(state.name) # 浏览state.name数据结构信息 
##  chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" "California" ...

  通过读取R自带的state.name数据,可以得到数据集中变量情况,数据中含有50条数据,1个变量。

2 数据的合并


  数据合并是指将两个有相同关键字的数据,以关键字或内容等来进行合并。

1)合并两个数据:

  基本函数规则:merge(数据1,数据2)

mergedata<-merge(state.name,state.area)#合并两个数据为mergedata
str(mergedata)  # 查看合并后的mergedata的数据结构                  
## 'data.frame':    2500 obs. of  2 variables:
##  $ x         : Factor w/ 50 levels "Alabama","Alaska",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ state.name: Factor w/ 50 levels "Alabama","Alaska",..: 1 1 1 1 1 1 1 1 1 1 ...

  通过数据进行合并后,得到2500条数据,含有2个变量.

2)关键字合并

  实现数据合并,需要通过数据中的关键字进行合并。合并的函数是merge,基本函数规则为:merge(data1,data2,by=“关键字”)

外部数据导入,以常见的Excel数据为例,如下所示:

library(readxl)
## Warning: package 'readxl' was built under R version 3.4.4
data1=read_excel("D:/Task/2R语言基础/课程2.xlsx")     ##导入Excel数据
str(data1)                    
## Classes 'tbl_df', 'tbl' and 'data.frame':    3 obs. of  5 variables:
##  $ 学号                   : num  90236 90237 90238
##  $ 性别                   : chr  "女" "男" "女"
##  $ 基于R统计分析与数据挖掘: num  93 87 90
##  $ 统计预测与决策         : num  95 87 90
##  $ 统计学                 : num  89 67 80

  通过加载readxl包,用来读取xlsx格式的数据。得到3条数据,5个变量。

data2=read.csv("D:/Task/2R语言基础/课程1.csv", stringsAsFactors=F)  #导入csv数据
str(data2)
## 'data.frame':    3 obs. of  6 variables:
##  $ 学号: int  90236 90237 90238
##  $ 性别: chr  "女" "男 " "女"
##  $ 英语: int  89 73 91
##  $ 数学: int  60 90 89
##  $ 思修: int  89 90 91
##  $ 马原: int  93 90 88

  通过对csv格式的数据进行读取,得到3条数据,6个变量。其中data2和data1中有数据元素相同,需要以相同元素为规则,对2个数据进行合并。

  合并数据是为了将数据的信息内容进行完善,从而丰富数据的信息量。

mydata<-merge(data1,data2,by="学号") #通过学号关键字进行合并数据 
str(mydata) ## 读取合并后的mydata
## 'data.frame':    3 obs. of  10 variables:
##  $ 学号                   : num  90236 90237 90238
##  $ 性别.x                 : chr  "女" "男" "女"
##  $ 基于R统计分析与数据挖掘: num  93 87 90
##  $ 统计预测与决策         : num  95 87 90
##  $ 统计学                 : num  89 67 80
##  $ 性别.y                 : chr  "女" "男 " "女"
##  $ 英语                   : int  89 73 91
##  $ 数学                   : int  60 90 89
##  $ 思修                   : int  89 90 91
##  $ 马原                   : int  93 90 88

  通过关键字“学号”,对数据进行合并,数据的信息更加完善,得到了3条数据,10个变量信息。

3 数据排序


  数据排序是按照一定规律对数据进行排列、整理。通常以降序或者升序排列,能够有效的观察到数据的特征。

  1)order函数排序

  利用order函数进行排序,基本函数规则为:

  order(向量名列表,decreasing=TRUE/FALSE)

  参数decreasing的含义是对数据进行升降序排列。当decreasing=TRUE时表示对数据的位置进行降序排列;当decreasing=FALSE时表示对数据位置的进行升序排列。如下所示:

mydata$统计学
## [1] 89 67 80

  数据中的统计学成绩最高是89分,对应元素位置为1;统计学成绩最低为67分,对应元素位置是2;统计学成绩为80分,对应元素位置是3.

order(mydata$统计学,decreasing=TRUE)
## [1] 1 3 2

  对mydata数据的变量统计学的成绩进行降序排列,其中统计学成绩最高是89分对应位置为1,统计学成绩最低为67分的位置是2,统计学成绩为80分的位置是3.故order函数是对位置中对应的数值大小内容进行降序排列,即“1 3 2”对应的排序分数是“89 80 67”。

order(mydata$统计学,decreasing=FALSE)
## [1] 2 3 1

  如果不加参数decreasing,会自动按照升序排列,加了参数decreasing=FALSE时表示对数据进行升序排列。其中统计学成绩最高是89分对应位置为1,统计学成绩最低为67分的位置是2,统计学成绩为80分的位置是3.故order函数是对位置中对应的数值大小内容进行升序排列,即“2 3 1”对应的排序含义是“67 80 89”。

  2)sort函数排序

  利用sort函数进行排序,基本函数规则为:

  sort(向量名列表,decreasing=TRUE/FALSE)

  其中,参数decreasing表示对数据进行升降序排列。当decreasing=TRUE时表示对数据进行降序排列;当decreasing=FALSE时表示对数据进行升序排列。如下所示:

sort(mydata$统计学,decreasing=TRUE)
## [1] 89 80 67

  对mydata数据的变量统计学的成绩进行降序排列,排序后统计学成绩最高为89分,统计学成绩最低为67分。

sort(mydata$统计学,decreasing=FALSE)
## [1] 67 80 89

  如果不加参数decreasing,会自动按照升序排列,加了参数decreasing=FALSE时表示对数据进行升序排列。可见排序后统计学成绩最低为67分,统计学成绩最高为89分。