数据分析基本概念

更新时间:2023-11-02 04:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章数据分析基本概念

一、 数据与变量的类型

数据是一切可以表示信息的符号,例如数字、文本、日期等等。变量一般表示某个事物的属性,而数据就是变量的具体取值。例如描述一个人的时候,年龄、性别、身高、年收入都是变量,而18岁、30岁是数据,是变量年龄的具体取值。

从数据分析的角度看,变量的类型有:

1.

连续性的变量

比如,身高,体重,化验值等等,可以进行计算。其中一种数据只可以进行加减运算,不能进行乘除运算,我们称之为等距数据,其0值只是相对的,而不是表示没有。例如温度,我们可以说20摄氏度比5摄氏度高出15摄氏度,但不能说多4倍,0摄氏度也是有温度,而不是一点温度都没有了。等比数据是可以四则运算的,其0值有绝对意义。例如网站的日访问量,0访问量就是代表没有人访问,微信上的推送阅读数2000可以说比500多1500,也可以说多4倍,这个倍数是有意义的。

2.

分类变量

其变量值是定性的,表现为互不相容的类别或属性。实际上在调研当中运用最多的就是分类变量,可分为无序变量和有序变量两类。①无序分类变量是指所分类别或属性之间无程度和等级顺序的差别,例如二项分类,性别(男、女),药物反应(阴性、阳性)等。例如多项分类,血型( O、A、B、AB),职业(工、农、商、学、兵)等。②有序分类变量是指各类别之间有程度的差别。如尿糖化验结果按-、±、+、++、+++分类;疗效按治愈、显效、好转、无效分类。

注意在分析中判断好数据的类型,一种常见的错误就是认为数字就一定代表连续性变量,例如我们可以用1和0表示性别男和女,这里的1和0就不是连续性数据。再例如某问卷调查中,采用五级量表,分别用1到5表示非常不满意、不满意、一般、满意、非常满意的五种态度,这里的1和5就是有序分类变量。

二、 数据的描述

1.

平均数

平均数是指反映一种数据集中趋势的度量,其值是样本中所有数据之和除以样本个数。计算公式为:μ

=

2. 中位数

中位数是指数据分布中处于中间位置的数,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。 3.

平均数与中位数比较

一般来说,平均数是被认为最好的数据水平的描述,应用也最为普遍。但是平均数对出现极端值的情况处理不如中位数。如下例:

A组年收入数据(1000,4,3,2,1) B组年收入数据(6,4,3,2,1)

A的平均数是202,B的平均数是3.2,AB两组的中位数都是3,显然在这种情况中(A组出现极端值),中位数比平均数更能反映一组数据的水平。对于出现极端值的情况,我们可以采取同时计算平均数和中位数的方法来表述数据的水平,也可以采用去除极端值后再计算平均值的方法(较多采用),从而得到相对准确的估计。

有必要提醒的是,对于极端值出现的情况进行细致分析,往往能得到有价值的结果。

4.

四分位数

四分位数是把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。从由小到大的顺序,处在第一个分割点位置的数叫下四分位数,第二个分割点的就是前面介绍的中位数,第三个分割点的就是上四分位数。在一组数据中,有四分之一的数据小于下四分位数,四分之一的数大于上四分位数。

例如数组(2,5,7,8,9,10,12,15,16,17,19,21,22,25,30),下四分位数是8,中位数是15,上四分位数是21。对于四分位数,箱线图可以比较好地反映了数据的分布,典型的箱线图结构如图错误!文档中没有指定样式的文字。-1所示。

图错误!文档中没有指定样式的文字。-1:箱线图

5. 标准差

标准差是反映一组数据离散程度的数据度量,在数据分析中具有重要地位,应用非常广发,是各种统计检验的基础。

例如AB两个网站上投放广告在6天的点击率如表错误!文档中没有指定样式的文字。-1

所示

广告点击率 A网站 B网站 2014/1/1 2014/1/2 2014/1/3 2014/1/4 2014/1/5 2014/1/6 45 30 55 6 65 80 75 40 50 200 70 4 表错误!文档中没有指定样式的文字。-1 AB两个网站投放广告6天点击率数据

经过计算,A和B网站6天内的广告点击率的平均数都是600,仅此是否可以得出结论这两个网站的广告投放效果是相同的呢?答案是否定的,从数据上初步观察,B网站上广告点击率数据显然更为分散,而A网站上的广告点击率数据相对更稳定些,从可以看出这一区别:

图错误!文档中没有指定样式的文字。-2 AB网站广告点击率数值分布图

本例中仅仅包含少量数据,如果对于大数据集合的稳定性,靠观察比较还是不够的,用标准差来描述更为合理,标准差的计算公式为:

其中σ表示标准差,N是样本数据个数,μ是样本平均数,xi表示样本中第is个数据。公式计算过程语言可描述为:将每个数据与平均值之差的平方进行求和,再除以数据个数,最后求平方根,所得的结果即为改组数据的标准差。因而AB两个网站点击率的标准差分别为:

A=

为什么标准差可以能很好反映数据的离散程度?上述计算表明当数据离散程度越高,单项数据与平均值之差的平方也就越大,最终标准差也就越大,这点下表也有明确的反映。

广告点击 A网站 B网站 A网站(Xi-μ)2 B网站(Xi-μ)2 2014/1/1 2014/1/2 2014/1/3 2014/1/4 2014/1/5 2014/1/6 45 55 65 75 50 70 30 6 80 40 200 4 225 25 25 225 100 100 900 2916 400 400 19600 3136 表错误!文档中没有指定样式的文字。-2 AB网站单项数据与平均值之差的平方

6. 频数

频数概念常用于分类变量,也可以对连续型变量进行分组后进行频数统计,它是指落在各分类中的数据的个数。将各个类别及其相应的频数全部列出来就是频率分布或称次数分布,将频数分布用表格的形式表现出来就是频数分布表。

例如,为了调查某网站访问者的地域分布,获取数据如下所示: 地域 上海 四川 新疆 广东 福建 西藏 合计 人数 112 51 9 16 10 2 200 比例 0.56 0.255 0.045 0.080 0.050 0.010 1 百分比 56.0 25.5 4.5 8.0 5.0 1.0 100 表错误!文档中没有指定样式的文字。-3某网站访问者地域频数分布表

很显然,如果不进行分类整理,观察200个人分别分布在哪些地域就很不方便,通过分类整理后,就很容易地、直观地判断出哪个地方访问该网站的人最多,哪个地方的人最少。

如果是连续性数据,可以用一定的分组方式,例如以下学生成绩:(67,88,46,36,78,90),我们可以规定小于60为不及格,否则为及格,则分数的频数分布就是不及格:2;及格4。

在表错误!文档中没有指定样式的文字。-3中,对频数分布的描述还有比例和百分比两个度量方式,这种统计分析中也是经常用到的。比例是各类别中数据的数量占总体数据个数的比重,通常用于反映总体的构成或结构。如果总体数量被分成K个部分,每一部分的数量是N1、N2、??、Ni,则比例定义为Ni/N,显然各部分比例之和等于1,即:

百分比是一种标准化的比例,很多相对数都用百分比来表示,当分子很小分母很大时,也可以采用千分比来表示比例。

通常绝对数并不能用来进行比较,比例才是合适的比较方式。例如,A文章中有错别字10个,B文章中有错别字2个,我们能下结论说A文章的错别字情况比B文章严重的多吗?如果A文章总字数是5万个,而B文章只有20个字呢?

7.

累积频数

累积频数经常用于有序变量,计算方法就是按照顺序将各类别的频数逐级累加起来,有两个方向:一是从类别顺序的等级低的一方向等级高的一方进行累加,称为向上累积;而是从等级高的一方向等级低的一方累积,称为向下累积。通过累积频数,能够很容易地看出某一等级之下或之上的频数之和。例如某调查对网络视频广告态度的人数统计如下: 指标 频数 向上累积 向下累积 百分比(%) 向上累积频率 向下累积频率 非常不满意 100 100 200 50.0 50.0 100 不满意 50 150 100 25.0 75.0 50.0 一般 25 175 50 12.5 87.5 25.0 满意 15 190 25 7.5 95.0 12.5 非常满意 10 200 10 5.0 100 5.0 表错误!文档中没有指定样式的文字。-4网络视频广告态度调查累积频数表

8. 累积频率

在表错误!文档中没有指定样式的文字。-4中还有累积频率的度量方式,它可以用来对不同数据组的累积分布进行比较,其计算方法是按照等级顺序计算各类别的百分比例,同样有向上累积频率和向下累积频率两种计算方向。

第2章 R语言基础 第1节 R语言简介

一、 为什么要使用R语言

? 许多统计软件价格不菲,而R语言完全是免费的,越来越多的企事业单位使用R语言。

? R是一个全面的统计研究平台,提供各式各样的数据分析技术,几乎任何类型的数据分析工作都可以在R中完成。

? R具有顶尖水准的制图功能,对于希望复杂数据能够可视化的情境下,R语言特别适用。

? R语言任何一个分析步骤的结果均可以被轻松保存,并被作为进一步分析的输入。

? R语言特别方便从多个种类的数据源获得数据,包括文本文件、数据库、excel表、统计软件以及专门的数据仓库。它同样可以把数据写到这些系统中。

? R语言提供便捷快速的统计命令,相比其它统计软件而言,一些常用的数据分析往往通过简单的命令或代码即可完成。

? R语言源源不断产生各种包,提供强大的函数方便实现各种数据分析统计功能。

二、 R语言的获取和安装

R可以在CRAN(网址:http://cran.r-project.org)上免费下载,下载时要注意选择计算机的操作系统以及位数(也即你的计算机是基于32位的还是64位的)。

三、 R的使用

在R语言中,大小写是区分开的,这和很多其它语言不一样,例如在R语言中经常要有布尔值TRUE的应用,将其写为true就会发生报错。所以在调用各种函数时,由于大小写没有注意分开而报错是常见的现象。所以在R命令运行发生错误的时候,检查有没有大小写的误用(特别是将该大写的字母用小写表示了)。

R语句主要由函数和赋值构成,函数用来对数据进行处理,赋值往往是将处理的结果存储到某一变量中。函数是R语言的核心,每个函数都有固定的函数名和系列参数,实现特定的统计和分析功能(包括作图)。R语言的赋值使用<-,而非=号(虽然R语言允许使用=来表示赋值,但这不是标准写法,在本课程中,赋值只允许使用<-)。例如语句:

>x<-c(1,2,2,3,5)

即调用c函数(功能构建一个向量),生成向量(1,2,2,3,5)并将其赋值给变量x。 提醒:R语言的命令提示符是>,以后案例中的分析代码或命令时,均以命令提示符>开头,如果你要练习案例中的代码,案例中的>是不能输入的。

R语言的注释是由#开头的,在#之后出现的任何文本都会被R解释器所忽略。添加注释是个好习惯,他有助于你回头检查R程序时指导某条命令或代码是做什么用的,而没有注释帮助,你原先清晰的思路在回头检查时会消失地无影无踪。

(一) R Console

安装完R后,可以从开始菜单启动R,也可以双击桌面的R图标启动R,界面如图错误!

文档中没有指定样式的文字。-3所示:

图错误!文档中没有指定样式的文字。-3 R Console界面图

在R Console中,命令提示符是红色现实,在其后可以输入R语句并回车运行。我们可以通过一个简单的例子来了解一下R工作过程。

部分婴儿月龄和体重数据如表错误!文档中没有指定样式的文字。-5所示,体重的分布如何?及其与月龄是否存在什么关系?

月龄 01 03 05 02 体重(kg) 4.4 5.3 7.2 5.2 月龄 09 03 09 12 体重(kg) 7.3 6.0 10.4 10.2

月龄 11 体重(kg) 8.5 月龄 03 体重(kg) 6.1 表错误!文档中没有指定样式的文字。-5 10名婴儿月龄和体重

R语言对该问题的处理代码如下:

代码清单错误!文档中没有指定样式的文字。-1:

>age<-c(1,3,5,2,11,9,3,9,12,3) #将10名婴儿月龄赋值到向量age中

>weight<-c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1)#将10名婴儿体重赋值到向量weight > mean(weight) #用mean函数求体重的平均值 [1] 7.06

> ad(weight) #用sods函数求体重的标准差 [1] 2.077498

> cor(age,weight) #用cor函数计算月龄和体重的相关系数 [1] 0.9075655

> plot(age,weight) #用plot函数绘制月龄和体重的散点图

运行结果显示,10名婴儿的平均体重是7.06kg,标准差为2.08kg,二者有较强的线性相关关系,相关系数达到0.908。月龄和体重的散点图如图错误!文档中没有指定样式的文字。-4所示:

图错误!文档中没有指定样式的文字。-4 10名婴儿的月龄和体重散点图

从散点图中可以看到,随着婴儿的月龄增加,其体重也有增加趋势。

(二) RStudio

一个更好的R编辑器是RStudio,可以方便地从网上下载和安装,运行后界面如图错误!

文档中没有指定样式的文字。-5所示:

图错误!文档中没有指定样式的文字。-5 RStudio界面

RStudio提供了更为便捷的操作方式,可以方便地在命令编辑区域定位鼠标,以及提供一些图形化操作。

(三) 包

R语言提供了大量称之为包的用户贡献模块供免费下载和安装,它们提供了惊人的功能,包括地理数据分析、甚至是心理测验分析的功能。用R分析数据免不了要多次使用这些包。

1.

安装包

安装包的命令格式如下: >install.packages(\包名称\

命令运行后,会弹出选择镜像地址的列表,选择适合的地址(例如China Hefei),就可以安装了。

注:在RStudio中安装包往往出现不能解析服务器的情况,笔者也未探明其原因,出现此情况的时候在R Console中运行安装包命令即可解决,RStudio中可以正常使用。

2.

载入包

如果要用所安装包中的函数来处理数据,必须先载入包,载入包的命令是 >library(包名)

3.

包使用中常出现的问题

? 使用了错误的大小写,导致命令中的包名和实际包名不一样。

? 忘记在安装包时在报名两端加上双引号(英文)。 ? 载入包时在包名两端又加上双引号。 ? 还未载入包时就使用包中的函数或者数据集。

(四)

1.

使用R脚本执行命令

建立脚本

打开Rstudio,在File菜单中选择“New File”子菜单中的“R Script”命令。

2.

在脚本中执行命令

在脚本工作区输入多条正确的R命令,将光标定位在该命令中,单击“Run”按钮或者按下“Ctrl+R”组合键,就可以执行该R命令。

脚本中的命令可以进行修改,然后重新执行。

3.

R脚本保存

单击“保存”按钮或者按下“Ctrl+S”组合键,可以保存当前R脚本。第一次保存时会要求选择保存位置和R脚本的文件名。

4.

打开R脚本

在File菜单中选择“Open File”命令,在弹出的对话框中找到R脚本所存储的位置,将其打开即可。

(五) 界面清除命令

按下“Ctrl+L”键盘,可以将R命令窗口的内容全部清除。 使用rm(对象名),可以将创建的对象删除。

例如对于已经创建的向量a,rm(a)命令可以将向量a清除。

第2节 创建数据集

一、 数据集的概念

数据集通常是由数据构成的矩形数组,其中行表示观测或者一个记录,列表示变量。表

错误!文档中没有指定样式的文字。-6显示了一个假想的数据集。

文章号(ID)

1001 1002 1003

时间(time) 2012-12-11 2012-12-17 2013-02-04

阅读量(read)

1227 2556 3318

评论量(access)

320 447 592

1004 2013-05-08 4978 841

表错误!文档中没有指定样式的文字。-6一个假想的数据集

在这个假想的数据集里,可以看到四个列表示四个变量,有时候数据集中的列称之为字段或者属性。每一行代表一个记录,即一个具体对象通过观测获得得的几个变量的具体的值。R语言数据集中的数据,可以是数值型、字符型、逻辑型、日期型等。

二、 数据结构

(一)

向量

向量是存储数据的一组数组。例如数值型向量(12,4,56,6)存储4个数据,字符型向量(\)存储了3个字符,注意字符两端要用双引号括起来。向量非常重要,是R语言中数据存储和处理的基本单元。创建向量可以用函数 c( ) 来实现。

代码清单错误!文档中没有指定样式的文字。-2

a<-c(1,2,3,4,5,6,7,8) #创建一个数值型向量并存储在a中

b<-c(\ #创建一个字符型向量并存储在b中。

单个向量中必须拥有同样类型的数据,例如c(1,4,\)由于包含了数值型和字符型数据,将不能得到正确结果。

在命令提示符后输入向量名,例如>a,并回车,就会看到向量a中所包含的数据。也可以通过在方括号中给定具体的位置,来访问向量这一位置上的值。例如a[4]访问向量a的第4个元素。也可以在方括号内包含一个存储多个位置值的向量,来访问向量多个位置上的值,但这多个位置需要用c()函数构建一个向量,例如a[c(1,5)]表示访问向量的第1和第5个元素。

代码清单错误!文档中没有指定样式的文字。-3

> a<-c(2,5,6,8,0,7)

>a[2] [1] 5

>a[c(1,3,4)] [1] 2 6 8

创建向量时,也可以用冒号生成一个数据序列,例如c(2:5)就是生成一个从2到5的数值序列,等价于c(2,3,4,5)。

我们也可以把向量和其它元素(类型要相同)或几个向量放在c函数中,连接成一个新的向量。例如:

a<-c(1,2,3,4) b<-c(5,6,7,8)

x<-c(8,9,a) y<-c(b,9,10)

a<-c(a,b) #将向量a和b连接起来成为一个新向量,并保存在a中。

可以使用sort(向量名称)对向量进行正序排序,rev(向量名称)将向量反向排序。

(二) 矩阵

矩阵是一个二维数组,也就是将若干元素放置在若干行和若干列中,每个元素拥有相同的数据类型,例如:

C1 C2 C3 C4

R1 1 2 3 4 R2 5 6 7 8

就是一个2行3列的矩阵,其中R1和R2是行的名称,C1~C4是列的名称。 可以通过matrix函数创建,函数格式为:

matrixname<-matrix(vector, nrow=行数, ncol=列数,byrow=逻辑值(TRUE或者FALSE),dimnames=list(行名向量,列名向量))

其中vector是一个向量,包含了矩阵中的元素。示例代码如下:

>mymatrix<-matrix(c(1:12),nrow=3,ncol=4,byrow=TRUE,dimnames=list(c(\C1\

创建完后,可以输入矩阵名mymatrix并回车来观察创建结果。 如果要访问矩阵中的某个元素,其格式是: 矩阵名[行号,列号]

例如mymatrix[2,3]访问的就是矩阵mymatrix第2行第3列的元素值。

如果行号缺失,表示访问指定列的所有数据,例如mymatrix[,2]表示访问第2列全部数据;而如果列号缺失,表示访问指定行的所有数据,例如mymatrix[3,]表示访问矩阵第三行的全部数据。

如果需要访问多行或多列数据,那么多个行号或列号要用c函数组织为一个向量,例如 mymatrix[c(1,3),]表示访问矩阵的第1、3行的全部数据。

(三) 数组

数组array与矩阵类似,但是维度可以大于2,数组可以通过array函数创建,创建形式如下:

myarrayname<-array(vector, dimensions, dimname=list(\维度1名称向量\维度2名称向

量\??,\维度n名称向量\

其中其中vector是一个向量,包含了数组中的元素,dimensions要用向量表示数组各维度的值。例如代码清单错误!文档中没有指定样式的文字。-4创建了一个4列2行的二维数组。

代码清单错误!文档中没有指定样式的文字。-4

>dimr<-c(\>dimc<-c(\

>z<-array(1:8,c(2,4),dimnames=list(dimr,dimc))

(四)

1.

数据框

数据框创建

与矩阵或数组不一样,数据框各列可以是不同数据类型的向量,它是R语言中最常处理的数据结构。例如表格: PatientID(病人编号)

1 2 3 4

就是一个典型的数据框。

数据框的创建可以通过函数data.frame创建,具体格式是: >数据框名称<-data.frame(向量1,向量2,??,向量n)

其创建一般过程是将数据框各列的数值存储于一个向量中,然后再用data.frame函数将其组织存储到该数据框中,代码清单错误!文档中没有指定样式的文字。-5描述了一个数据集创建的例子。

代码清单错误!文档中没有指定样式的文字。-5

Age(年龄)

25 34 30 27

Method(治疗方法)

药物 精神 药物 精神

Stats(疗效)

改进 一般 改进 恶化

>patientID<-c(1,2,3,4) >age<-c(25,34,30,27)

>method<-c(\药物\精神\药物\精神\>stats<-c(\改进\一般\改进\恶化\

>patientdata<-data.frame(patientID,age,diabets,stats) >patientdata

patientID age method stats 1 1 25 药物改进 2 2 34 精神一般 3 3 30 药物改进 4 4 27 精神恶化

数据框的各列虽然可以是不同数据类型,但各列内部的数据必须是类型同一的。

2.

(1)

数据框引用

单个元素的引用

数据框的数据可以引用,单个元素的引用格式是:数据框名称[行号,列号] 例如patientdata[2,4]表示的是数据库第2行、第4列的值“一般”。 (2)

引用若干行列

引用若干行列的格式是:数据框名称[行号向量,列号向量]

代码清单错误!文档中没有指定样式的文字。-6

>patientdata[c(1,2),c(2,3)]

引用中,也可以用变量名替代列号向量里的列号。

例如代码清单错误!文档中没有指定样式的文字。-6的引用命令也可以改写成patientdata[c(1,2),c(\,效果是一样的,不过注意,使用这种方式时命令中的变量名必须有双引号括起来。

如果在行号和列号前加上负号,表示选择除了该行(列)的其它所有行(列) (3)

引用若干行

在实际应用中,经常需要查看数据框的少量行来观察它的变量。如果直接输入数据框名称来观察的话,由于记录过多,会占据整个R编辑器窗口从而为操作带来不便。查询少数行命令格式是:数据框名称[行号向量,],(也即将逗号后的列向量省略)

例如patientdata[c(2,3),]是用来查看数据框patientdata的第2行和第3行数据,patientdata[1:3,]表示查看patientdata的1到3行数据。(1:3是用来生成一个由1到3的序列组成的向量)

一个简单的方法是,使用head(数据框名)就可以显示该数据框的前五行数据。在观察数据框的变量结构时,这个函数命令会非常有用。 (4)

引用若干列

同理,将数据框行列引用命令中的行向量省略,就可以访问数据框的若干列。具体命令格式是:数据框名称[,列号向量]或者是数据框名称[,列名向量],比如对于数据框patientdata,patientdata[,c(1,4)]和patientdata[,c(\结果是一样的。

(5) 数据框变量名的引用(重点)

R语言数据分析中,经常要对数据框中的某个变量进行处理,例如要求解patientdata数据框中年龄的平均值,直接运行mean(age)命令是不能得出结果的,因为R语言不知道要求解的age是哪个变量(可能在多个数据框中都有age这个变量),因此必须指定引用

的变量是属于哪个数据框,具体引用方法是:数据框name$变量名。代码清单错误!

文档中没有指定样式的文字。-7才能正确求出patientdata中各年龄的均值。

代码清单错误!文档中没有指定样式的文字。-7

>mean(patientdata$age)

不过,如果对某个数据框中的变量多次处理,每个变量前都加上“数据框名$”这样的前缀是很讨厌的,大大增加的输入工作量而且容易出错。可以采用以下两种方法来简化。

代码清单错误!文档中没有指定样式的文字。-8

>attach(patientdata)

>mean(age) >max(age)

>plot(age,stats)

>dettach(patientdata)

采用代码清单错误!文档中没有指定样式的文字。-8的方式,数据框中的变量就不用再需要加上数据框名$这样的前缀了,其中关键的步骤在于attach(数据框名)的绑定操作,这样其后的变量名都默认属于attach所处理的数据框。不过在应用完后,最好用dettach(数据框名)将其解除。

不过这种方式也有容易出错的时候,因为在一个R语言数据分析项目中,同一个变量名可能有很多个,如果在绑定操作之前就存在与所绑定数据框中相同名称的变量,则数据框中同名变量将被屏蔽,因而得不到所需要的结果。例如:

> a<-c(1,2,3,4)

> mydata<-data.frame(a=c(10,20,30,40),b=c(20,40,60,80)) >attach(mydata)

下列对象被屏蔽了_by_ .GlobalEnv: a

下一种处理格式可以避免命名冲突问题: >with(patientdata,{ datamean<-mean(age) datamax<-max(age)

})

plot(age,stats)

对于这种处理方式,大括号中所有的引用变量都是属于with所声明patientdata数据框的,如果命令只有一条,那么大括号可以省略。不过with括号内的赋值只能在with括号内有效,如果让with括号内赋值能在全局范围有效,可以用“<<-”替代“<-”,如下例所示:

>with(mtcars,{

+ mymean<-mean(mpg) + mymean + })

[1] 20.09062 >mymean

Error: object 'mymean' not found

注:mtcars是R语言自带的一个数据框,如果R命令需要换行,按住shift键回车即可。 对于变量的应用,大部分R语言书籍都推荐with方式,就个人来说,习惯使用attach还是with方法来简化输入,或是直接使用“数据框名$变量名”的格式,根据个人的偏爱可以自己选择。但无论如何,变量名必须指定清楚属于哪个数据框,上述三种方法都是为变量指定数据框的,在后面介绍的一些函数中包括参数也具有指定数据框的作用。

(五) 因子

在数据分析中,经常存在类别的比较,存放类别信息的变量有名义型变量和有序型变量两种。名义型变量是没有顺序之分的类别变量,也即纯粹表示类别的变量,变量值的类别之间没有等级之分,例如“男”和“女”,数据框patientdata中的“method”变量,其中的取值是\药物\精神\也只是代表处理类型的区别,并不意味几者之间存在顺序或等级。而stats变量的取值有“改进”、“一般”、“恶化”,明显存在等级或顺序关系,因此stats变量属于顺序型变量。在R语言中,类别变量和顺序变量都统称之为因子。

因子非常重要,因为在R语言中经常需要根据因子类别来分组描述各种数据。如果在数据框中某个变量的取值是字符串而非数字,则默认该变量为因子,即每个字符串代表一种类别。例如以下数据框(一些微信公众号的推送信息):

Name(公众号名称) 中国家庭医生 中国家庭医生 中国家庭医生 健康管理 健康管理 健康管理 健康管理 Date(日期) 2014/6/26 2014/6/27 2014/6/30 2014/6/9 2014/6/10 2014/6/11 2014/6/12 Artinum(文章数) 3 4 4 1 1 1 1

健康管理 健康管理 2014/6/19 2014/6/30 1 1 表错误!文档中没有指定样式的文字。-7一个示例数据框(articledata)

公众号名这个变量就是因子,因子包括中国家庭医生和健康管理两个类别。我们可以根据不同的因子取值来统计每一种类别的相关数据,例如对于公众号名因子来说,中国家庭医生的文章总数是11,健康管理的文章总数是6。

在数据框中,有些变量例如日期、年龄是以数字形式表示的,有些变量例如性别,也是以1和0表示(1代表男,0代表女),如果要根据日期、年龄或者性别来分类统计分析数据,那么以数字来取值的变量是不被认为为因子的,此时直接处理会发生错误,所以要将这些实际表示类别却以数字取值的变量进行因子化,方法是对变量用因子函数factor处理。例如对日期进行因子化,则可以运行命令:articledata$date<-factor(articledata$date)

对于有序型变量,需要为factor函数指定参数ordered=TRUE。给定向量: status<-c(\

语句status<-factor(status,ordered=TRUE)会将status因子水平编码为(3,2,1,3),并在内部将其关联为1=excellent,2=improved,3=poor,并自动选择合适的办法将其作为有序型变量处理了。对于字符型变量,默认情况下,因子的水平是按照其字母顺序创建的。在上例中,按照字母顺序,excellent水平为1,improved水平为2,poor水平为3,这和三个因子的逻辑顺序也是一致的,因此并没有什么问题。但是如果poor编码改为alling,那么按照字母顺序,alling(表示很差)水平为1,exellect(优异)水平为2,improved(改进)水平为3,这是问题来了,因子的水平与其语义在逻辑上并不一致了,这种情况是很难让人满意的。对此我们可以通过levels参数来人工指定各因子的排序:

status<-factor(status,ordered=TRUE,levels=c(\

levels参数选项的值为一个向量,在向量中元素的位置就是其对应值的因子水平,因此alling因子水平被设置为1,improved因子水平被设置为2,excellent因子水平被设置为3,从而与逻辑顺序一致。

(六) 列表

列表是R的数据结构中最复杂的一种,在一些函数参数中有所引用。简单说,列表就是一些对象的有序结合,这些对象可以是向量、矩阵、数据框、数组,甚至是列表本身。可以使用list()创建列表,格式为:

列表name<-list(对象1,对象2,??)

三、 数据的输入或者导入

在实际工作中,R语言需要处理的数据需要临时输入,也可能存储在excel表、数据库或其他统计软件文件格式中(例如SPSS),那么我们要面临的工作是如何从这些地方将数据导入R中来并进行处理。

(一) 使用键盘输入数据

R语言中提供edit()函数调用一个允许手工输入数据的文本编辑器,具体步骤如下:

? 创建一个空的数据框(或者矩阵)

? 针对这个空的数据框调用文本编辑器,输入数据,并将结果保存。

具体过程如下代码所示:

代码清单错误!文档中没有指定样式的文字。-9

>mydata<-data.frame(age=numeric(0),gender=character(0),weight=numeric(0))

# 创建一个空的数据框,包含三个变量age、gender、weight,类型分别是数值、字符和数值。

>mydata<-edit(mydata) #调用文本编辑器,如图错误!文档中没有指定样式的文字。-6所示

图错误!文档中没有指定样式的文字。-6可手工输入数据的文本编辑器

单击文本编辑器第一行上的变量名,弹出变量编辑器面板,可以在其中修改数据框变量名和变量类型,如图错误!文档中没有指定样式的文字。-7所示:

图错误!文档中没有指定样式的文字。-7变量编辑器

使用edit()调用文本编辑器并手工输入的时候,必须将其赋予一个数据框,如果只运行命令>eidt(mydata),则在关闭文本编辑器时所有输入将丢失。可以采用另一种便捷的函数fix(mydata),而不用赋值,其输入结果直接保存到mydata。

(二) 将excel文件另存为CSV文件导入数据

很多数据是存储在excel表格中,可以将其另存为文本格式csv文件。而R语言提供read.table()函数来从csv文件导入数据,并将其保存在一个数据框中。函数的命令格式为:

数据框名<-read.table(\路径/文件名\

在导入csv文件的R命令中,数据框名是导入数据要存储在的数据框,路径是文本文件存放的位置,文件名是数据所在的文本文件,header=TRUE表示将文本文件的第一行作为数据框的字段变量,sep指定分割数据的符号,默认是逗号,也可以指定为制表符、空格等。

以下代码从e盘data文件夹下导入myfile.csv文件,保存在mydata数据框中。

代码清单错误!文档中没有指定样式的文字。-10

>mydata<-read.table(\注意,运行该命令导入CSV文件要避免以下易犯的错误有

? read.table函数名中间的点号没有写 ? 路径的分隔符合错写为\\ ? 文本文件的扩展名忘记

? header=TRUE没有区别大小写,例如将TRUE写成true。

还有种方法,可以将excel表格中要导入数据的某单元格选中然后按下Ctrl+A快捷键全选(这样为了快速复制),然后按下ctrl+c复制。

在R语言编辑器中,输入如下命令

>mydata<-read.table(\

就可以将excel中的数据导入到数据框mydata中。

(三) 从数据库导入数据

使用R访问存储在数据库中的数据是处理大数据集的有效手段。在R中,通过RODBC包访问数据库的流行方式,这种方式允许任何拥有ODBC驱动的数据库,也就是当前市面上流行的所有数据库。不过ODBC驱动需要自己安装并进行配置。以MYSQL为例,配置过程是如下所示:

(1)下载MYSQL的ODBC驱动并安装;

(2)双击打开“控制面板-->管理工具”中的“数据源ODBC”,如图错误!文档中没有指定样式的文字。-8所示:

图错误!文档中没有指定样式的文字。-8 ODBC数据源管理器

(3)单击图错误!文档中没有指定样式的文字。-8“ODBC数据源管理器”面板中的“添加”按钮,弹出“创建新数据源”面板,如图错误!文档中没有指定样式的文字。-9所示

图错误!文档中没有指定样式的文字。-9创建新数据源面板

(4)选择图错误!文档中没有指定样式的文字。-9“创建新数据源”中的“MySQL ODBC 5.3 Unicode Driver”,单击“完成”按钮,弹出图错误!文档中没有指定样式的文字。-10所示“配置数据源”面板

图错误!文档中没有指定样式的文字。-10数据源配置面板

(5)在图错误!文档中没有指定样式的文字。-10“数据源配置”面板中输入图错误!文档中没有指定样式的文字。-11所示的参数:

图错误!文档中没有指定样式的文字。-11参数设置

? Data Source Name:输入数据源连接的名称,在R中连接数据库中要用到该名称;

? Description:输入对该数据源的简单描述,可任意;

? TCP/IP Server:输入数据库服务器的IP地址,此处用本地数据库,输入localhost;

? user:输入数据框账号;

? Password:输入数据库连接密码;

? DataBase:选择所连接数据库所要访问的数据库;此时可以单击“Test”按钮测试连接是否成功;

(6)利用RODBC包中的函数访问数据库。

RODBC主要函数在表错误!文档中没有指定样式的文字。-8中介绍了相关功能。

函数 功能 建立一个到ODBC数据库的连接,dsn是控制面板中驱动配置时所取得的数据源名称,uid是数据库访问的账号,pwd是访问数据库的密码。该函数运行的结果应该存储在一个变量,例如channel中。 odbcConnect(dsn,uid=\sqlFetch(channel,\从channel存储的数据库连接中读取一个表,并存储到数据框中, tablename参数是具体的表名,两端有双引号括起来。 sqlQuery(channel,query) 在channel存储的数据库连接中运行一个query查询命令(select语句),将查询结果导入来存储到一个数据框中。 close(channel) 关闭与数据源的连接 表错误!文档中没有指定样式的文字。-8 RODBC包中主要函数

例:将某个数据库中的表kc导入到数据框mykc中。假设odbc驱动名称为myconnect,数据库访问账号是root,密码是123456。

代码清单错误!文档中没有指定样式的文字。-11

>library(RODBC)

>myconn<-odbcConnect(\>mykc<-sqlFetch(myconn,\第一种方法导入kc表中数据

>mykc1<-sqlQuery(myconn,\第二种方法导入crime表中数据 >close(myconn)

第二种方法提供了更为灵活地访问数据库的方式,它可以通过查询语句将满足一定条件以及所感兴趣的字段导入到数据框中。例如:

>mydata<-sqlQuery(myconn,\姓名,成绩 from xs_kc natural join xs\

也就是将xs_kc和xs表进行自然连接,从两个表中调取感兴趣的数据(姓名和成绩)。 不过查看各个数据框时,中文并没有正确显示出来,我们看到是一堆乱码,对于这种情况,需要进行如下处理

? 单击“Details”按钮,如图错误!文档中没有指定样式的文字。-12所示,

单击“Connection\选项卡,在“Character Set”(红色线框内)选择编码方式为

gb2312,这对R处理中正确显示数据库中的中文字符至关重

要;

图错误!文档中没有指定样式的文字。-12在Character Set列表中选择gb2312

因为此时有原先的连接存在,因此先运行close(mycoonn)命令,然后重新运行一下myconn<-odbcConnect(\命令,这时运行调入数据库数据到数据框的命令,中文显示正常。

?

如果运行select语句失败,可以将原先连接关闭掉,

重新建立一次连接有可能解决问题。

(四)

1.

处理数据对象的实用函数

length函数

功能:用来返回某个对象中元素或成分的个数,例如: >length(mydata) [1] 5

表示mydata数据框有5个变量 >length(mydata$date) [1] 16

表示数据框mydata的date变量有16个观测值,即16条记录值。

使用length函数时有种特殊的情况,就是计算某个变量中取值的种类数,例如 >a<-c(1,2,3,3,4,4)

在用函数处理含有缺失值的数据时,务必查一下函数的帮助文档(命令为help(函数名)),检查该函数如何处理缺失值的。

检查是否有缺失值的函数的is.na()

在一个数据集中,如果少量观测含有缺失值而影响分析结果的话,可以通过函数na.omit()移除所有含有缺失值的观测。例如na.omit(mydata)可以将mydata中所有包含缺失值的行删除。不过如果数据集中有大量缺失值的情况下,na.omit()函数可能删除大量数据,此时要用更高级方法来进行处理。

注意:从ecxel表中导入数据时,缺失的单元格在R中可能显示为空白,但它并不是缺失值,缺失值一定显示为NA。解决办法是将excel全选,用NA全部替换空白。

五、 日期值

日期或时间通常以字符串形式输入R中,或者从外部导入到R中的日期也是字符串形式。如果要在后期数据处理中将其作为日期值处理,必须将其转化为日期变量类型,这点非常重要,否则对日期的处理会发生错误。

将字符串形式的日期或时间转化为日期变量类型,可以使用as.Date()函数,其语法为as.Date(x),其中x是字符型日期数据。例如mydata中原始日期数据格式是“2014-01-12”的形式,可以用以下命令来转换为日期型变量:

>mydata$date<-as.Date(mydata$date),转化后的日期和转换前格式是一样的。 如果希望改变日期型变量的格式,可以用format(x,\命令进行修改,其中x必须是日期型变量,output_format是日期呈现的格式(见表错误!文档中没有指定样式

的文字。-12)。

符号

含义

数字表示的日期(01~31) 缩写的星期名 非缩写的星期名 月份(01~12) 缩写的月份 非缩写的月份 两位数的年份 四位数的年份

示例 01~31 Mon Monday 01~12 Jan January 07 2007

%d %a %A %m %b %B

%y %Y

表错误!文档中没有指定样式的文字。-12日期格式

例如在执行mydata$date<-as.Date(mydata$date)命令将date转换为日期型变量后,再执行命令:>mydata$date<-format(mydata$date,\,可以改变mydata中date变量的输出格式,可运行命令观察结果。

Sys.Date()可以获得当前的日期,date()函数返回当前的日期和时间。另外,日期可以直接做减法,得到两个日期相邻的天数。例如:

代码清单错误!文档中没有指定样式的文字。-15

>day<-as.Date(\>day

Time difference of 12835 days

说明从1980年1月1日到2015年2月21日已经过了12835天。

在数据处理过程中,有以下几种情况可能经常遇到,那么这些情况下该如何用R语言进行处理?

1.

转换年、月、日为日期

如果在原始数据中,年、月和日分别存储在不同的变量中,也就是它们是分离的,例如如下数据存储方式: 年 2010 2011 2011 月 3 4 8 日 27 21 18 访问量 1800 24000 32100 而我们在处理的时候需要将它们合并为规范的日期形式,解决的方案是先使用ISOdate函数将分离的年月日联结,然后对结果再调用as.Date函数转换成日期数据,其调用格式为:as.Date(ISOdate(year,month,day))。例如:

代码清单错误!文档中没有指定样式的文字。-16

>year<-c(2012,2011,2011) >month<-c(2,4,8) >day<-c(27,21,18)

>p<- as.Date(ISOdate(year,month,day)) >p

[1] \

不过,除非必要的情况下,并不建议将年月日分开来存储时间信息,如果需要用到单个的年、月或者日的数据,可以用下面的相关解决方案来处理。

2. 提取日期的一部分

对于提取日期数据的某一个部分,可以使用as.POSIXlt函数后得到一个POSIXlt对象,引用对象中的具体部分即可。具体例子如下:

代码清单错误!文档中没有指定样式的文字。-17

>p<-as.Date(\ #创建一个日期型变量 > p<-as.POSIXlt(p) #转换POSIXlt对象 > p$mday #调用日 [1] 27

> p$mon #调用月 [1] 1

> p$year #调用年 [1] 112

不过这段代码运行后,大家不知道有没有看出什么问题?那就是调用的年和月与实际数据并不一致,这是因为POSIXlt对象里的月是从0开始计,也就是1月用0表示,2月用1表示,而年是当前与1900年相隔多少年,因此,要得到具体的年和月,应该对代码调整,加上差值即可得到正确的数值:> p$mon+1 ;> p$year+1900。

上例只是给出了POSIXlt对象的几个引用,其完整的引用是: sec 秒数 0-59 min 分钟数 0-59 hour 小时数 0-23 mday 日 1-31 mon 月份 0-11 year 年份 wday 星期几 yday 该年的第几天 0-365 1900起 0-6 该函数也可以对日期向量进行处理,结果得到包含多个年、月、日等分离数据的向量。

代码清单错误!文档中没有指定样式的文字。-18

>mydate p<-as.Date(mydate) > p<-as.POSIXlt(p) >p$mon+1 [1] 2 4 8

>p$year+1900

[1] 2012 2011 2011

六、 数据类型转换

R中提供了一系列来用来判断某个对象的类型和将其转换为另一种类型的函数,前文所述的as.Date()就是转换为日期型数据的一个函数,其它函数见表错误!文档中没有指定样式

的文字。-13所示:

判断 转换

is.numeric() 判断是否数值类型 is.character() 判断是否字符类型 is.vector() 判断是否向量 is.matrix() 判断是否矩阵 is.data.frame() 判断是否数据框 is.factor() 判断是否因子 is.logical() 判断是否逻辑值

as.numeric() 转换为数值类型 as.character() 转换为字符类型 as.vector() 转换为向量类型 as.matrix() 转换为矩阵类型 as.data.frame() 转换为数据框类型 as.factor() 转换为因子 as.logical() 转换为逻辑类型

表错误!文档中没有指定样式的文字。-13类型判断函数和类型转换函数

类型判断函数返回值是TRUE或者FALSE,转换函数将对象转换为对应的数据类型。在编程时可以利用类型判断函数判断对象的类型并调用相应的处理程序,而某些R函数要求处理特定类型的对象,这些情况下类型判断函数和类型转换函数将派上很大用场。

七、 数据排序

在R中,可以利用order()函数对一个数据框进行排序,默认的排序是升序,在排序依据变量前加上负号则转换为降序排序。排序的命令是:

数据框名<-数据框名[order(排序字段1,排序字段2),]

以下例子表明了几种R语言中对数据框进行排序的方法(有人喜欢在excel或者数据库中先行进行排序,这也是一种方法选择)。

代码清单错误!文档中没有指定样式的文字。-19

1.将mydata根据date变量升序排序,并保存在一个新数据框newdata中: >newdata<-mydata[order(mydata$date),]

2.将mydata根据date排序,相同date值按照beijing变量值升序排序,并保存在一个新数据框newdata中:

>attach(mydata)

>newdata<-mydata[order(date,beijing),] >detach(mydata)

3.将mydata根据date排序,相同date值按照beijing变量降序排列,并保存在一个新数据框newdata中:

>attach(mydata)

>newdata<-mydata[order(date,-beijing),] >detach(mydata)

八、 数据集的合并

有时候,数据分散在不同的地方,在R中要对数据进行处理往往需要将这些分散的数据

合并起来,合并有合并列和合并行的两种方式:

1.

合并列

合并列是横向连接两个数据框,使用的函数是merge()函数,两个数据框是根据一个或多个共同变量来连接,以保证连接后的每一行都是同一个观测的数据。一个简单的合并过程如下:

数据集A 数据集B ID 1 2 Name TOM JACK gender F M ID 1 1 2 将二者进行合并的命令代码是: >merge(A,B,by=\ ID 1 1 2 合并结果为:

Name TOM TOM JACK gender F F M COURSE MATH COMPUTER ENGLISH SCORE 99 92 80 COURSE MATH COMPUTER ENGLISH SCORE 99 92 80 从合并结果看,根据ID可以判断A和B两个数据框中哪些行是属于同一个观测对象的,并在合并结果中将属于同一观测对象的行组成新的行。因此要用merge()函数进行数据框合并,则参加合并的数据框必须具有公共变量,而且要指定公共变量(可能不止1个)为合并依据,否则合并就不能成功或出现错误结果

如果公共变量有多个,则函数命令变为: merge(A,B,by=c(“公共变量1”,”公共变量2”,??))

也可以不根据公共变量横向合并两个数据框,函数是cbind(A,B),但是A和B必须按照相同方式排序而且行数要相等,我们并不提倡使用这种方法,出现错误几率较大。

2.

合并行

合并行是纵向合并两个数据框,使用的函数和命令格式是:rbind(A,B),使用这个函数

的条件是两个数据框必须具有同样的变量。

数据框A 数据框B Id 1 2 name TOM JACK gender M M Id 3 4 5 运行命令:newAB<-rbind(A,B) 结果为:

Id 1 2 3 4 5 name TOM JACK KATE MARRI ANNA gender M M F F F name KATE MARRI ANNA gender F F F 九、 数据框选择子集

有时候我们需要选择数据框的一个子集来进行处理,所谓子集是原数据框的一部分,子集的行满足一定的条件,或者是原数据框中的某些列。R语言中提供subset()函数来进行子集选择,命令格式是:

subset(数据框名,选取行的条件,选取的列)

选取行的条件一般是逻辑表达式,选取列的参数格式是select=c(变量1,变量2,??),如果subset()函数中缺失选取行的条件,则表示选择所有的行;缺失选择的列参数,则表示选择所有的变量;如果要在子集中删除部分列,则参数格式是select=c(-变量名1,-变量名2??),也即在需要删除的列名前加上减号。以下代码是选取子集的一些例子:

代码清单错误!文档中没有指定样式的文字。-20

选择guangzhou变量值大于5000且小于6000的行:

>newdata<-subset(mydata,guangzhou>5000&guangzhou<6000) 选择channel、date变量:

>newdata<-subset(mydata,select=c(channel,date)) 选择除了channel和date变量的其它全部变量: >newdata<-subset(mydata,select=c(-channel,-date))

选择满足guangzhou变量值大于5000且小于6000的行,且只有channel和date变量: >newdata<-subset(mydata,guangzhou>5000&guangzhou<6000, select=c(channel,date))

再次提醒,如果要删除所有包括空值的行,不能用subset函数,而是要用na.omit()函数。

十、 数值和字符处理函数

1.

基本数值处理函数

表错误!文档中没有指定样式的文字。-14给出常用的数学函数

函数 功能 求绝对值 求平方根 求不小于x的最小整数 求不大于x的最大整数 截取整数部分 将x舍定为指定小数位的小数 将x舍定为指定有效数字位数 求以n为底的x的对数 求自然对数 求以10为底的x的对数 求x的自然指数值 示例 abs(x) sqrt(x) ceiling(x) floor(x) trunc(x) round(x,digits=n) signif(x,digits=n) log(x,base=n) log(x) log10(x) exp(x) abs(-10)返回值是10 sqrt(25)返回值是5 ceiling(3.475)返回值是4 ceiling(-3.475)返回值是-3 floor(3.475)返回值是3 floor(-3.475)返回值是-4 trunc(5.89)返回值是5 trunc(-5.89)的返回值是-5 round(3.475,digits=2)的返回值的3.48 signif(3,475,digits=2)的返回值是3.5 log(81,3)返回值是4 log(10)返回值是2.3026 log10(1000)返回值是3 exp(2.3026)返回值是10 表错误!文档中没有指定样式的文字。-14常用数学函数及其功能

2.

(1)

nchar(x)

字符处理函数

nchar函数功能是获取字符串x里的字符个数,例如nchar(\的返回值是7, nchar(c(\的返回值是c(2,3)。 (2)

substr函数

substr函数功能是提取或替换字符串向量中的子串,格式为substr(x,start,stop),其中x是要处理的字符串,start是替换子串的起始位置,stop是替换子串的结束位置。

例如, substr(\的返回值是\。

再例如:

> x<-\

>substr(x,2,6)<-\>x

[1] \kksqqgxyz\

可以发现,起始位置2和结束位置6的子串“bcdef”被“kksqq”所替代。

(3) grep函数

grep函数是用来搜索字符串,格式是grep(A,B),即在字符串构成的向量B中寻找A是否存在,如果存在则返回A在向量中的下标。

例如grep(\的返回值是3。 (4)

sub函数

sub函数用于字符串替换,格式是sub(old,new,string),old是要被替换的子串,new是用来替换的子串,string是被处理的字符串。例如sub(\的返回值是“123XYZhhg”。 (5)

strsplit函数

strsplit函数功能是将字符串按照指定的字符进行分割,格式是strsplit(string,delimiter),string是要处理的字符串,delimiter是用来分割的字符,例如strsplit(\,返回结果是一个列表(\),包含被分割的三个字符向量。注意“\\\\s”是转义字符,表示空格。 (6)

paste函数

paste函数用来将多个字符串连接起来,格式是paste(??,sep=\,其中的参数省略号代表多个待连接的字符串,sep参数指定连接的字符。

>paste(\

[1] \(7)

toupper和tolower函数

toupper(x)函数功能是将字符串转化为大写,tolower(x)函数功能是将字符串转化为小写。

十一、 数据的整合

(一)

转置

转置是将矩阵或者数据框的行和列进行转换,也就是将行变成列,列变成行。R语言中,使用t()函数就可以实现数据的转置操作。我们以R语言中自带的mtcars数据集为例,看一下t函数的功能。

> mydata<-mtcars[1:5,1:4] #获取子集 > mydata #查看子集 mpg cyl disp hp

Mazda RX4 21.0 6 160 110 Mazda RX4 Wag 21.0 6 160 110 Datsun 710 22.8 4 108 93

Hornet 4 Drive 21.4 6 258 110 Hornet Sportabout 18.7 8 360 175 > t(mydata) #进行转置

Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout mpg 21 21 22.8 21.4 18.7 cyl 6 6 4.0 6.0 8.0 disp 160 160 108.0 258.0 360.0 hp 110 110 93.0 110.0 175.0

(二)

1.

数据重塑

数据融合

数据的重塑,是将原始数据组织重新进行架构,以满足特定的统计和描述的数据组织形式需求。

例如我们要研究某APP在13、14年分别在北京、上海和广州新增用户量,搜集的原始数据如表错误!文档中没有指定样式的文字。-15所示:

year 2013 2014 beijing 18000 24000 shanghai 26000 37000 guangzhou 9400 12000 表错误!文档中没有指定样式的文字。-15网络应用新增用户的原始数据

表错误!文档中没有指定样式的文字。-15虽然有四列,但是第2、3、4列均表示同一种

数据(都是指新增用户量),在很多统计以及可视化函数中,如果要对三个地方的数据进行比较分析,就要求同一种数据只能占据一列(一个好的数据组织习惯是,在数据框中,每个变量都代表唯一的属性。表错误!文档中没有指定样式的文字。-15中的beijing、shanghai、guangzhou几个列都同样表示新增阅读量,这不是一个好的习惯,而且没有专门一个变量表示新增用户量的地域属性)。因此,表错误!文档中没有指定样式的文字。-15的数据组织需要重新调整为另一种方式,如表错误!文档中没有指定样式的文字。-16所示: year 2013 2013 2013 2014 2014 city beijing shanghai guangzhou beijing shanghai newuser 18000 26000 9400 24000 37000

本文来源:https://www.bwwdw.com/article/sct2.html

Top