---
title: "数据合并与排序"
output: 
  html_document:
    number_sections: TRUE
    toc: TRUE
    toc_float: TRUE
    code_folding: show
    fig_width: 7
    fig_height: 4.5
    theme: united
    highlight: tango
---


<font size=4 face="微软雅黑">


#数据获取
***
&emsp;&emsp;R数据集的获取，分为外部导入和内部获取。以下在数据合并中会对两种方法进行展示。用data()函数能调出R中含有的自带数据集，选择R自带的state.area数据进行读取，如下所示：
```{r,}
state.area=data.frame(state.area)
str(state.area) # 浏览state.area数据结构信息
```
&emsp;&emsp;通过读取R自带的state.area数据，可以得到数据集中变量情况，数据中含有50条数据，1个变量。 
```{r,}
state.area=data.frame(state.name)
str(state.name) # 浏览state.name数据结构信息 
```
&emsp;&emsp;通过读取R自带的state.name数据，可以得到数据集中变量情况，数据中含有50条数据，1个变量。

# 数据的合并
***
&emsp;&emsp;数据合并是指将两个有相同关键字的数据，以关键字或内容等来进行合并。

1）合并两个数据：

&emsp;&emsp;基本函数规则:**merge(数据1，数据2)**
```{r,}
mergedata<-merge(state.name,state.area)#合并两个数据为mergedata
str(mergedata)  # 查看合并后的mergedata的数据结构                  
```
&emsp;&emsp;通过数据进行合并后，得到2500条数据，含有2个变量. 

2）关键字合并

&emsp;&emsp;实现数据合并，需要通过数据中的关键字进行合并。合并的函数是merge，基本函数规则为：**merge(data1，data2，by="关键字")**

外部数据导入，以常见的Excel数据为例，如下所示：
```{r,}
library(readxl)
data1=read_excel("D:/Task/2R语言基础/课程2.xlsx")     ##导入Excel数据
str(data1)                    
```
&emsp;&emsp;通过加载readxl包，用来读取xlsx格式的数据。得到3条数据，5个变量。
```{r,}
data2=read.csv("D:/Task/2R语言基础/课程1.csv", stringsAsFactors=F)  #导入csv数据
str(data2)
```
&emsp;&emsp;通过对csv格式的数据进行读取，得到3条数据，6个变量。其中data2和data1中有数据元素相同，需要以相同元素为规则，对2个数据进行合并。

&emsp;&emsp;合并数据是为了将数据的信息内容进行完善，从而丰富数据的信息量。
```{r,}
mydata<-merge(data1,data2,by="学号") #通过学号关键字进行合并数据 
str(mydata) ## 读取合并后的mydata
```
&emsp;&emsp;通过关键字“学号”，对数据进行合并，数据的信息更加完善，得到了3条数据，10个变量信息。

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

&emsp;&emsp;1）order函数排序

&emsp;&emsp;利用order函数进行排序，基本函数规则为：

&emsp;&emsp;**order(向量名列表，decreasing=TRUE/FALSE)**

&emsp;&emsp;参数decreasing的含义是对数据进行升降序排列。当decreasing=TRUE时表示对数据的位置进行降序排列；当decreasing=FALSE时表示对数据位置的进行升序排列。如下所示：
```{r,}
mydata$统计学
```
&emsp;&emsp;数据中的统计学成绩最高是89分，对应元素位置为1；统计学成绩最低为67分，对应元素位置是2；统计学成绩为80分，对应元素位置是3.
```{r,}
order(mydata$统计学,decreasing=TRUE)
```
&emsp;&emsp;对mydata数据的变量统计学的成绩进行降序排列，其中统计学成绩最高是89分对应位置为1，统计学成绩最低为67分的位置是2，统计学成绩为80分的位置是3.故order函数是对位置中对应的数值大小内容进行降序排列，即“1 3 2”对应的排序分数是“89 80 67”。

```{r,}
order(mydata$统计学,decreasing=FALSE)
```

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

&emsp;&emsp;2）sort函数排序

&emsp;&emsp;利用sort函数进行排序，基本函数规则为：

&emsp;&emsp;**sort(向量名列表，decreasing=TRUE/FALSE)**

&emsp;&emsp;其中，参数decreasing表示对数据进行升降序排列。当decreasing=TRUE时表示对数据进行降序排列；当decreasing=FALSE时表示对数据进行升序排列。如下所示：
```{r,}
sort(mydata$统计学,decreasing=TRUE)
```

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

```{r,}
sort(mydata$统计学,decreasing=FALSE)
```
&emsp;&emsp;如果不加参数decreasing，会自动按照升序排列，加了参数decreasing=FALSE时表示对数据进行升序排列。可见排序后统计学成绩最低为67分，统计学成绩最高为89分。
