Excel是数据分析中最常用的工具,本篇文章通过R与excel的功能对比介绍如何使用R通过函数式编程完成excel中的数据处理及分析工作。我们总结出最常用的50个函数,通过这些函数介绍如何通过R完成数据生成和导入,数据清洗,预处理,以及最常见的数据筛选,回归预测和假设检验等最常见的操作。
本系列文章共分为三篇10个部分。已由人民邮电出版社出版,感兴趣的朋友可以在异步社区获取完整版。
这是第二篇,介绍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))
纵向合并的意思就是在数据表的后面追加新的行记录,R中使用rbind函数来完成这个工作。下面是具体的代码,将df和df1两个数据表进行纵向合并。
#合并数据表
df<-rbind(df,df1)
第二种数据表合并的方法是在现有的数据表中增加新的字段。增加新字段的方法有两种,将现有的字段进行合并,通过现有字段进行计算后生产新字段。
下面的代码中我们使用paste函数将id和city字段进行合并,生产新的id_city字段,并合并在df数据表中。
#合并两个字段的内容
id_city<-paste(df$id,df$city)
df=cbind(df,id_city)
另一种方法是对数据表中的字段进行计算,生产新的字段。下面的代码中对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)
4.2. 数据排序
Excel中可以通过数据目录下的排序按钮直接对数据表进行排序,比较简单。R中需要使用order函数完成排序。
首先,我们按id对数据表进行排序。Decreasing参数为TRUE表示逆序。
#对数据表按id列进行排序(逆序)
df[order(df$id,decreasing = TRUE),]
省略decreasing参数默认为正序排序。下面的代码按rate对数据表进行排序。
#对数据表按rate列进行排序(正序)
df[order(df$rate),]
也可以同时多数据表中的多列进行排序,下面是具体的代码和排序后的结果。
#对多列进行排序
df[order(df$age,df$price,df$age,decreasing = TRUE),]
4.3. 数据分列
Excel中的数据目录下提供“分列”功能。在R中使用strsplit函数实现分列。对于分列的操作R比Excel要复杂,下面是具体的代码,包括提取数据,转换格式和数据表合并等操作。
在数据表中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)
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))
使用merge函数对两个数据表进行合并,合并的方式为inner,将两个数据表中共有的数据匹配到一起生成新的数据表。
#数据表合并 inner模式
df<-merge(df,df2,by=’id’)
除了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
4.6. 数据分组
最好我们对数据表按价格区间进行分组,使用ifelse函数对数据进行判断并标记。价格大于等于4000元的标记为high,小于4000元的标记为low,并将结果记录在group列中。
#按price对数据进行分组
df$group<-ifelse(df$price>=4000,”high”,”low”)
5,数据提取
第五部分是数据提取,也是数据分析中最常见的一个工作。这部分主要使用三个数据提取的方法,按位置提取,按索引提取和按条件提取。下面介绍每一种函数的使用方法。
5.1. 按位置提取数据
#提取数据表第二行
df[2,]
#提取数据表第二行至第三行
df[2:3,]
#提取数据表第二列
df[2]
#提取数据表第二列至第三列
df[,2:3]
#提取数据表第二行第二列
df[2,2]
#提取数据表特定区域数据
df[2:3,2:3]
5.2. 按索引提取数据
#按索引提取行数据
df[‘1001’,]
#按索引提取多行数据
df[c(‘1001’,1003),]
#按列名称提取
df[‘city’]
#按索引提取行与列数据
df[‘1003′,’city’]
#按索引提取多个行与列数据
df[c(‘1001’,1003),c(‘city’,’age’)]
5.3. 按条件提取数据
#查找年龄最大的记录所在行信息
df[which.max(df$age),]
#查看金额最小的记录所在行信息
df[which.min(df$price),]
6,数据筛选
第六部分为数据筛选,使用与,或,非三个条件配合大于,小于和等于对数据进行筛选,并进行计数和求和。与excel中的筛选功能和countifs和sumifs功能相似。
6.1. 按条件筛选(与,或,非)
Excel数据目录下提供了“筛选”功能,用于对数据表按不同的条件进行筛选。R中使用subset函数配合筛选条件来完成筛选功能。配合sum和count函数还能实现excel中sumif和countif函数的功能。
首先简单筛选数据表中城市为”shanghai”的数据。
#数据筛选
subset(df,df$city==”shanghai”)
使用“非”条件筛选数据表中城市不是“shanghai”的数据。
#按非条件进行筛选
subset(df,df$city!=”shanghai”)
使用“与”条件筛选数据表中城市为“shanghai”,并且年龄大于30岁的数据。
#按与的条件筛选
subset(df,df$city==”shanghai” & df$age>30)
使用“或”条件筛选数据表中城市为“shanghai”,或年龄小于30岁的数据。
#按或的条件筛选
subset(df,df$city==”shanghai” | df$age<30)
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函数完成相应的操作。
#使用table进行汇总计数
table(df$size)
#使用table对两个字段进行汇总计数
table(df$color,df$size)
#按city对price求和汇总
tapply(df$price,df$city,sum)
#按city对id计数汇总
tapply(df$id,df$city,length)
下一篇文章,也就是本系列的最后一篇我们将介绍8-10最后三部分的内容,分别为数据统计,相关分析,回归预测及假设检验,数据导出。请朋友们继续关注。
本文为专栏文章,来自:蓝鲸,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/45545.html 。