前面四章讲到了R和Rstudio的安装,Rstudio的基本使用方法,各种数据的导入和导出、R语言数据类型和数据结构,如果你已经较为熟练的掌握了R的这些基本知识,你们现在就可以正式开始我们的数据分析工作了。
数据分析包括数据的采集、处理、分析、可视化。
这一章主要讲解数据分析的第二步——数据处理。数据处理是每一个数据分析师拿到数据所做的第一步。因为几乎没有一份数据到我们的手中时,所有的内容都是我们满意的,而且处理后的数据即相当于从大量信息中剔除噪音,让我们获取更多的信息。
我推荐《R语言实战》这本书作为新手的入门书,里面的内容很详细,适合新手学习。
我对于简单数据处理的思路分为7块,分别是数据概览、修改、添加、删除、排序、合并、选入观测。
1、数据概览
在拿到数据之前第一步要做的就是概览数据
head(df,n=10)#查看数据集的前十条记录
str(df)#查看数据集结构
tail(df)#查看数据集最后部分
sapply(df)#查看数据集类型及名称
summary(df)#查看数据集各变量描述统计
……
供练习数据集
name1 <- c("Bob","Mary","Jane","Kim")
name2 <- c("Bob","Mary","Kim","Jane")
weight <- c(60,65,45,55)
height <- c(170,165,140,135)
birth <- c("1990-1","1980-2","1995-5","1996-4")
accept <- c("no","ok","ok","no")
df1 <- data.frame(name1,weight,height)
df2 <- data.frame(name2,birth,accept,stringsAsFactors = F)
2、数据修改
数据修改主要包括变量的重编码、重命名,数据格式的改变,数据位置的调整,
2.1变量的重编码
1)将df1中Kim的身高改为165
df1$height[name1=='Kim] <- 165
2)将体重按定性变量定义,小于等50kg为thin,51到60kg为normal,大于60kg为fat
df1$weight[weight <= 50] <- 'thin'
df1$weight[weight > 50 & weight <=60] <- 'normal'
df1$weight[weight > 60] <- 'fat'
2.2变量的重命名
为了方便处理、或是更好的表示数据特征,我们需要更改变量名称,常用函数为names()
names(df1)#查看所有变量名
names(df1)[2] <- 'size'#把变量‘weight’改为‘size’
2.3更改数据格式、类型
1)更改日期格式
日期格式的默认格式为yyyy-mm-dd
Sys.Date()#查看系统日期
today <- Sys.Date()
format(today,"%d %a %b")#输出格式为[1] "2017-06-20"这是我的写作日期,将日期格式修改为%d %a %b
补充:format()可以用于转换数据格式,包括小数、科学计算方法等等。
2)更改更多数据类型
is.datatype()函数查询数据类型,返回TRUE或FALSE。而as.datatype()函数则转换为对应的类型。
3)缺失值处理
is.na(df1$weight)#判断缺失值
df1$weight <-NA#改为缺失值
data=data.frame(y=c(1,2,3,NA,5,6),x1=c(6,NA,4,3,2,1),x2=c(1,3,6,9,12,NA))
attach(data)
y[is.na(y)]=mean(y,na.rm=T)
x1[is.na(x1)]=mean(x1,na.rm=T)
x2[is.na(x2)]=mean(x2,na.rm=T)
data=data.frame(y,x1,x2)#把缺失值修改为平均值
3.数据的添加
数据的添加包括添加字段(变量)、记录
1)添加变量(列)
df2 <- transform(df1,BMI=weight/height^2)#第一种方法
df1$BMI <- df1$weight/df1$height^2#第二种方法
2)添加记录(行)
添加记录在R中较麻烦,需要新建数据框,合并原有数据框,放在合并那块细讲。
4.数据的删除
数据的删除包括删除字段、记录、缺失值等
1)删除字段(列)
df2[-c(2,4)]
df2[c(-2,-4)]
df2[c(T,F,T,F)]
以上方式皆相同,都为直接删除列
df2$weight <- df2$BMI <-NULL#将列定义为缺失值,从而删除列
%in%表示返回逻辑型向量,出df2中的birth、accept为F,其他皆为T
myvars <- names(df2) %in% c('birth','accept')
df2 <- df2[!myvars]#!表示相反
2)删除记录(行)
df2[!accept=='no',]#删除含特定值的行,这里讲不接受的人删除
3)删除含缺失值的行
na.omit()后者
5.数据的排序
1)R自带函数的排序方法
df1[order(df1$weight),]#升序
df1[order(-df1$height),]#降序
df3 <- data.frame(name1,weight,height,accept,stringsAsFactors=F)
df3[order(df3$accept,df3$weight),]#按照是否接受进行体重升序
2)dplyr包排序方法
library(dplyr)
arrange(df3,accept,weight)#按照是否接受进行升序
6.合并数据集
1)合并merge()
merge(df1,df2,by='name1') #按name1,合并df1、df2
merge(df1,df2,by='name1',all=T) #保留缺失值
另外还有两种常见的合并函数:行合并rbind(),列合并cbind()
dplyr包高效合并
bind_rows(df1,df2)#区别rbind(df1,df2)
bind_cols(df1,df2)
2)整合aggregate()
aggregate(df,by=list(col1,col2…),FUN)#根据col1、col2的变量添加FUN函数,整合数据框。
3)重铸reshape()
'''names(airquality) <- tolower(names(airquality))
View(airquality)
aqm <- melt(airquality,id=c("month","day"),na.rm = T)#融合,na.rm=T不显示空值
aqm1 <- melt(airquality,id=c("month","day"),na.rm = F)#显示空值
dcast(aqm,day+variable~month)#重铸,R语言实战第五章P.107
dcast(aqm,variable+day~month)
dcast(aqm,day~variable+month)
dcast(aqm,day~month,mean)#计算变量variable均值
dcast和acast用法相似,dcast会把分组信息作为一列或者几列显示,acast会将其作为行名
dcast(aqm,variable+month~day)
acast(aqm,variable+month~day)
acast(aqm,day~month,mean)
acast(aqm,variablemonthday)#生成一个三维矩阵,按照day分成31个矩阵
install.packages('tidyr')'''
用的很少,这里就几个例子,下次遇到再补充。
7.选入观测
1)观测特定列
df1[,c(1,2)]
2)观测特定行
subset(df1,df1$weight>=50|df1$weight<=60,select = c('name1'))