像Excel一样使用R进行数据分析(2)

本篇文章通过R与excel的功能对比介绍如何使用R通过函数式编程完成excel中的数据处理及分析工作。

Excel数据分析中最常用的工具,本篇文章通过R与excel的功能对比介绍如何使用R通过函数式编程完成excel中的数据处理及分析工作。我们总结出最常用的50个函数,通过这些函数介绍如何通过R完成数据生成和导入,数据清洗,预处理,以及最常见的数据筛选,回归预测和假设检验等最常见的操作。

像Excel一样使用R进行数据分析(2)

本系列文章共分为三篇10个部分。已由人民邮电出版社出版,感兴趣的朋友可以在异步社区获取完整版。

 

像Excel一样使用R进行数据分析(2)

这是第二篇,介绍4-7部分的内容,数据预处理,数据提取,数据筛选和数据汇总。

4,数据预处理

第四部分是数据的预处理,对清洗完的数据进行整理以便后期的统计和分析工作。主要包括数据表的合并,排序,数值分列等工作。

4.1. 数据合并

首先是对不同的数据表进行合并。数据表的合并有三种,横向合并,纵向合并和增加新字段。我们这里创建一个新的数据表df1,并将df和df1两个数据表进行纵向合并。

df1<-data.frame(id=c(1007,1008,1009,1010),

city=c(“Beijing”,”shenZhen”,”guangzhou”,”shenzhen”),

age=c(25,34,24,37),

category=c(“100-D”,”100-A”,”110-C”,”110-A”),

price=c(1600,2633,2433,4442))

像Excel一样使用R进行数据分析(2)

纵向合并的意思就是在数据表的后面追加新的行记录,R中使用rbind函数来完成这个工作。下面是具体的代码,将df和df1两个数据表进行纵向合并。

#合并数据表

df<-rbind(df,df1)

像Excel一样使用R进行数据分析(2)

 

第二种数据表合并的方法是在现有的数据表中增加新的字段。增加新字段的方法有两种,将现有的字段进行合并,通过现有字段进行计算后生产新字段。

下面的代码中我们使用paste函数将id和city字段进行合并,生产新的id_city字段,并合并在df数据表中。

#合并两个字段的内容

id_city<-paste(df$id,df$city)

df=cbind(df,id_city)

像Excel一样使用R进行数据分析(2)

另一种方法是对数据表中的字段进行计算,生产新的字段。下面的代码中对price进行计算生产每条记录在price中的比率字段,并合并在原有数据表中。

#计算新字段并合并

rate=round(df$price/sum(df$price),digits = 2)

[1] 0.04 0.11 0.07 0.17 0.11 0.14 0.05 0.08 0.08 0.14

df=cbind(df,rate)

像Excel一样使用R进行数据分析(2)

 

4.2. 数据排序

Excel中可以通过数据目录下的排序按钮直接对数据表进行排序,比较简单。R中需要使用order函数完成排序。

像Excel一样使用R进行数据分析(2)

首先,我们按id对数据表进行排序。Decreasing参数为TRUE表示逆序。

#对数据表按id列进行排序(逆序)

df[order(df$id,decreasing = TRUE),]

像Excel一样使用R进行数据分析(2)

省略decreasing参数默认为正序排序。下面的代码按rate对数据表进行排序。

#对数据表按rate列进行排序(正序)

df[order(df$rate),]

像Excel一样使用R进行数据分析(2)

 

也可以同时多数据表中的多列进行排序,下面是具体的代码和排序后的结果。

#对多列进行排序

df[order(df$age,df$price,df$age,decreasing = TRUE),]

像Excel一样使用R进行数据分析(2)

 

4.3. 数据分列

Excel中的数据目录下提供“分列”功能。在R中使用strsplit函数实现分列。对于分列的操作R比Excel要复杂,下面是具体的代码,包括提取数据,转换格式和数据表合并等操作。

 

像Excel一样使用R进行数据分析(2)

在数据表中category列中的数据包含有两个信息,前面的数字为类别color,后面的字母为size值。中间以连字符进行连接。我们使用strsplit函数对这个字段进行拆分,并将拆分后的数据表匹配回原数据表中。下面是具体的代码和结果。

#数据分列

df_category<-df$category

typeof(df_category)

[1] “integer”

df_category=as.character(df_category)

typeof(df_category)

[1] “character”

df_c<-strsplit(df_category,’-‘)

color<- sapply(df_c, “[“, 1)

size<- sapply(df_c, “[“, 2)

category1=data.frame(color,size)

df=cbind(df,category1)

像Excel一样使用R进行数据分析(2)

4.4. 数据表匹配

数据匹配是我们在经常使用的操作之一,我们这里创建一个新的数据表df2,并将df和df1两个数据表进行合并。在Excel中可以通过VLOOKUP函数实现。在R中可以通过merge函数一次性实现。下面建立df2数据表,用于和df数据表进行合并。

df2<-data.frame(id=c(1001,1002,1003,1004,1005,1006,1007,1008),

gender=c(‘male’,’female’,’male’,’female’,’male’,’female’,’male’,’female’),

pay=c(‘Y’,’N’,’Y’,’Y’,’N’,’Y’,’N’,’Y’),

m_point=c(10,22,22,54,20,43,18,27))

像Excel一样使用R进行数据分析(2)

使用merge函数对两个数据表进行合并,合并的方式为inner,将两个数据表中共有的数据匹配到一起生成新的数据表。

#数据表合并 inner模式

df<-merge(df,df2,by=’id’)

像Excel一样使用R进行数据分析(2)

除了inner方式以外,合并的方式还有left,right和outer方式。这几种方式的差别在我其他的文章中有详细的说明和对比。

#数据表合并 outer模式

merge(df,df2,by=’id’,all=TRUE)

#数据表合并 left模式

merge(df,df2,all.x=TRUE,by=’id’)

#数据表合并 right模式

merge(df,df2,all.y=TRUE,by=’id’)

4.5. 设置索引列

完成数据表的合并后,我们对df数据表设置索引列,索引列的功能很多,可以进行数据提取,汇总,也可以进行数据筛选等。设置索引的函数为rownames。

#设置索引列

rownames(df)=df$id

 

像Excel一样使用R进行数据分析(2)

4.6. 数据分组

最好我们对数据表按价格区间进行分组,使用ifelse函数对数据进行判断并标记。价格大于等于4000元的标记为high,小于4000元的标记为low,并将结果记录在group列中。

#按price对数据进行分组

df$group<-ifelse(df$price>=4000,”high”,”low”)

像Excel一样使用R进行数据分析(2)

5,数据提取

第五部分是数据提取,也是数据分析中最常见的一个工作。这部分主要使用三个数据提取的方法,按位置提取,按索引提取和按条件提取。下面介绍每一种函数的使用方法。

5.1. 按位置提取数据

#提取数据表第二行

df[2,]

像Excel一样使用R进行数据分析(2)

#提取数据表第二行至第三行

df[2:3,]

 

像Excel一样使用R进行数据分析(2)

#提取数据表第二列

df[2]

像Excel一样使用R进行数据分析(2)

#提取数据表第二列至第三列

df[,2:3]

 

像Excel一样使用R进行数据分析(2)

#提取数据表第二行第二列

df[2,2]

像Excel一样使用R进行数据分析(2)

 

#提取数据表特定区域数据

df[2:3,2:3]

像Excel一样使用R进行数据分析(2)

 

5.2. 按索引提取数据

#按索引提取行数据

df[‘1001’,]

像Excel一样使用R进行数据分析(2)

#按索引提取多行数据

df[c(‘1001’,1003),]

像Excel一样使用R进行数据分析(2)

#按列名称提取

df[‘city’]

 

像Excel一样使用R进行数据分析(2)

#按索引提取行与列数据

df[‘1003′,’city’]

 

像Excel一样使用R进行数据分析(2)

#按索引提取多个行与列数据

df[c(‘1001’,1003),c(‘city’,’age’)]

像Excel一样使用R进行数据分析(2)

5.3. 按条件提取数据

#查找年龄最大的记录所在行信息

df[which.max(df$age),]

 

像Excel一样使用R进行数据分析(2)

#查看金额最小的记录所在行信息

df[which.min(df$price),]

 

像Excel一样使用R进行数据分析(2)

6,数据筛选

第六部分为数据筛选,使用与,或,非三个条件配合大于,小于和等于对数据进行筛选,并进行计数和求和。与excel中的筛选功能和countifs和sumifs功能相似。

6.1. 按条件筛选(与,或,非)

Excel数据目录下提供了“筛选”功能,用于对数据表按不同的条件进行筛选。R中使用subset函数配合筛选条件来完成筛选功能。配合sum和count函数还能实现excel中sumif和countif函数的功能。

 

像Excel一样使用R进行数据分析(2)

首先简单筛选数据表中城市为”shanghai”的数据。

#数据筛选

subset(df,df$city==”shanghai”)

像Excel一样使用R进行数据分析(2)

使用“非”条件筛选数据表中城市不是“shanghai”的数据。

#按非条件进行筛选

subset(df,df$city!=”shanghai”)

像Excel一样使用R进行数据分析(2)

使用“与”条件筛选数据表中城市为“shanghai”,并且年龄大于30岁的数据。

#按与的条件筛选

subset(df,df$city==”shanghai” & df$age>30)

 

像Excel一样使用R进行数据分析(2)

使用“或”条件筛选数据表中城市为“shanghai”,或年龄小于30岁的数据。

#按或的条件筛选

subset(df,df$city==”shanghai” | df$age<30)

像Excel一样使用R进行数据分析(2)

6.2. 筛选后对数据进行计算

在前面的代码后增加price字段和sum函数。对筛选后的price字段进行求和,相当于excel中的sumifs函数的功能。

#Excel中的sumifs求和

sum(subset(df,df$city==”shanghai” | df$age<30)$price)

[1] 9852

#Excel中的countifs计数

length(subset(df,df$city==”shanghai” | df$age<30)$id)

[1] 4

#Excel中的averageifs计数

mean(subset(df,df$city==”shanghai” | df$age<30)$price)

7,数据汇总

第七部分是对数据进行分类汇总,Excel中使用分类汇总和数据透视可以按特定维度对数据进行汇总,R中进行汇总的方法有多种,本文主要介绍的函数是table和tapply。下面分别介绍这两个函数的使用方法。

7.1. 分类汇总

Excel的数据目录下提供了“分类汇总”功能,可以按指定的字段和汇总方式对数据表进行汇总。R中通过table和tapply函数完成相应的操作。

像Excel一样使用R进行数据分析(2)

#使用table进行汇总计数

table(df$size)

像Excel一样使用R进行数据分析(2)

 

#使用table对两个字段进行汇总计数

table(df$color,df$size)

像Excel一样使用R进行数据分析(2)

#按city对price求和汇总

tapply(df$price,df$city,sum)

像Excel一样使用R进行数据分析(2)

 

#按city对id计数汇总

tapply(df$id,df$city,length)

像Excel一样使用R进行数据分析(2)

下一篇文章,也就是本系列的最后一篇我们将介绍8-10最后三部分的内容,分别为数据统计,相关分析,回归预测及假设检验,数据导出。请朋友们继续关注。

本文为专栏文章,来自:蓝鲸,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/45545.html 。

(0)
蓝鲸的头像蓝鲸专栏
上一篇 2017-06-29 13:35
下一篇 2017-07-01 05:03

相关文章

关注我们
关注我们
分享本页
返回顶部