30 天学会R DAY 16:R语言数据整理大总结
卖萌控的博客
点击这里进入电脑版页面!体验更好
30 天学会R DAY 16:R语言数据整理大总结
2022-6-4 萌小白


在利用R语言统计分析之前,建议诸位复习数据清洗和整理方法,打好基础!今天,我着重对定量定性数据的转换功能进行总结,并推出tidyverse系列包供大家了解。



1、 数值变量数据转为分类变量数据


数值变量数据经常要转换为分类变量,由于本系列课程分类变量的转换,分散在各处,今天进行汇总。常见的方法如下:



# 先读取数据集



t1<-read.csv("elder1.csv")



t2<-read.csv("elder2.csv")



#第一种方法,利用ifelse进行简单转换



t1$SBP1<-ifelse(t1$SBP>=140,1,0)



#第二种方法,最基本的多分类转换方法



t1$income2[t1$income>=5]<-3



t1$income2[t1$income<5 &t1$income>=3 ]<-2



t1$income2[t1$income<3 ]<-1



# 第三种方法,利用within语句进行



t1<- within(t1,{



income3<-NA



income3[income>=5] <- 3



income3[income<5 & income >=3] <- 2



income3[income < 3] <-1})



#第四种方法,利用循环语句



for(i in 1:length(t1$income)){



if(is.na(t1$income[i])){



t1$income4[i]<-NA



} else if(t1$income[i]<3){



t1$income4[i]<-1



} else if(t1$income[i]<5){



t1$income4[i]<-2



}else if(t1$income[i]>=5){



t1$income4[i]<-3



}



}



# 第五种方法,编一个函数来统筹数据转换



f1<-function(x){



for(i in 1:length(X)){



if(is.na(x[i])){



y[i]<-NA



} else if(x[i]<3){



y[i]<-1



} else if(x[i]<5){



y[i]<-2



}else if(x[i]>=5){



y[i]<-3



}



}



return(y)



}



attach(t1)



t1$income10<-f1(income)



detach



二、分类变量数据因子化和转换


数据库中字符串往往自动默认设置为因子(factor),但是数值型一般默认为numeric。然后,我们数据库构建时,分类数据也会采用数值1、2、3来表达。这个时候,往往需要采用一定的方法进行因子化处理。



常见的方法factor或者as.factor



> is.numeric(t2$sex)



[1] TRUE



> is.factor(t2$sex)



[1] FALSE



> t2$sex<-factor(t2$sex)



> is.factor(t2$sex)



[1] TRUE



我们也可以利用apply族函数来进行因子批量化操作



vars<-c("sex","marriage","education","huji","income","smoking")



t2[vars] <- lapply(t2[vars], factor)



分类数据如何进行转换呢?比如三分类转为二分类,多分类变成二分类。分类数据除了我们第一点“数值变量数据转为分类变量数据”介绍的5种方法之外,还有以下的方法:



#利用dplyr包的mutate语句,可以对factor进行操作,数值结果不形成因子



library(dplyr)



table(t1$income)



t1$income<-factor(t1$income)



t1<-mutate(t1,income5=recode(income,"1"=1,"2"=1,"3"=2))



t1<-mutate(t1,income6=recode(income,"1"=1,"2"=0))



t1<-mutate(t1,income7=recode(income,"1"=1,"2"=0,.default =3) )



is.factor(t1$income7)



#利用dplyr的recode_factor语句,可以对factor进行操作,直接形成因子



s1$income8=recode_factor(t1$income,"1"=1,"2"=2)



s1$income9=recode_factor(t1$income,"1"=1,"2"=2,"3"=2)



table(t1$income)



table(t1$income9)



is.factor(t1$income9)



另外,如果有兴趣者可以学习forcats包来开展因子的处理,这里不再铺开来讲。



三、tidyverse系列包,数据整理当红辣子鸡。


Tidyverse是一组R语言包的集合,看起来似乎我们课程没有介绍过它,但是实际上我们已经接触过它了,学过它的两个包dplyr和tidyr。两个包功能非常强大,给我们留下了深刻印象,但tidyverse不仅包括上述两个包,它还有更多的包。它集合了当下最为流行的数据处理包,是简化数据操纵、便利统计操作、美化结果呈现的高效工具。



有人说,tidyverse系列包,让R语言换发了新的青春!



1. 基本理念



tidyverse是由RStudio首席科学家Hadley Wickham开发的R套装的集。整洁数据是Hadley
等人极力提倡的一个数据处理理念。若要执行统计计算,统计软件对数据格式有一定要求。但通常外部导入的数据并不一定能达到软件处理的要求,而需要进行一定的预处理,此过程通常也称为数据清洗(data
cleaning)。实际上,这种前期处理的工作往往占据比狭义的统计分析更多的时间。为此,需要将无序数据(messy
data)整理成可供计算机程序识别与处理的、具备特定格式的数据,即整洁数据,其基本特征有三:



1.每列为一个变量(Each variable is in a column);



2.每行为一个观测(Each observation is in a row);



3.每个单元格为一个取值(Each value is a cell)。






这些特征在后面的例子中会逐一呈现,这里暂不展开。分析者获得的数据有些本身就适宜软件分析,但很多时候并非如此。使用tidyverse 包,可高效地将无序数据转为整洁数据,以便软件分析。



2.安装与加载



安装tidyverse 包,即可一次性安装多个系列包。






最常用数据分析包:



• ggplot2,用于数据可视化



• dplyr,用于数据操纵



• tidyr,用于数据整洁



• readr,用于读入R 格式数据



• purrr,用于编程



• tibble,用于形成便于数据处理的数据框



数据操纵类:



• stringr,用于处理字符串数据



• lubridate, 用于处理日期和时间数据



• forcats,用于处理因子数据



数据导入类:



• DBI,用于联接数据库



• haven,用于读入SPSS、SAS、Stata 数据



• httr,用于联接网页API



• jsonlite,用于读入JSON 数据



• readxl,用于读入Excel 文档



• rvest,用于网络爬虫



• xml2,用于读入xml 数据



数据建模类:



• modelr,用于使用管道函数建模



• broom,用于统计模型结果的整洁



3.基于tidyverse包的数据整理和加工系统性思维



Hadley 等重新定义了R语言,在他们看来R语言整个流程过于复杂,因此他们在从数据import
到整理、清晰、可视化、建模等多方面都需要得到改善,因此提出清洁R语言的概念。以下两张图说明tidyverse包在数据分析中各个环节中,各包发挥的作用。可以说,我们基于tidyverse
所有的包,就可以完成数据前期整理和清晰的过程,并且可以方便我们更好的构建容易表达的统计模型。









可以看出,tidyverse系列能够在数据整个过程中,不仅是数据整理,在数据导入、可视化、建模、结果表达都能够实现对R编程的重构,简化代码,降低学习和使用R语言的难度。



如果你想深入学习R语言,那么基于tidyverse系统学习R语言是最好的途径!关于tidyverse也有一本专门的书《R for data science》,已经有相应的中文版,这应该是学习tidyverse的一本圣经。


转自:医学论文与统计分析
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容