数据分析中最重要的并不是如何敲代码,如何收集数据,而是数据分析前的准备——数据导入,数据框架的构建、数据的基础处理、数据分析的问题提出和思考......
4.1一个示例
需要解决数据管理方面的问题:
01.比如对“NA”的处理,我们需要一种处理不完整数据的方法。
02.是否需要对经理人的年龄进行重新编组,或者我们希望研究特定时间段的数据结果......等。
以上这些就需要我们对收集到数据进行有效处理,比如数据的组合、排序等。
4.2创建新变量
01.方法:变量名<-表达式
02.目的:定向研究中需要对现有的变量进行变换时。
03.主要使用算术运算符
比如一个mydata的数据框,其中的变量为x1和x2,创建一个新变量sumx存储以上两个变量的和,并创建一个名为meanx的新变量存储这两个变量的均值。
sumx<-x1+x2
meanx<-(x1+x2)/2,以上代码将产生一个错误的结果。
正确的解决方案如下:
transform()函数简化了按需创建新变量并将其保存到数据框中的过程。
4.3变量的重编码
重编码涉及根据同一个变量和/或其他变量的现有值创建新值的过程。使用R中的一个或多个逻辑运算符。逻辑运算符表达式可以返回TRUE或FALSE。
比如,leadership中经理人的age重新编码为类别型变量agecat(Young、Middle、Elder),如此99的年龄值必须设置为缺失值:leadership$age[leadership$age==99]<-NA
使用以下代码创建agecat变量:(注意使用的是[],而不是())使用within()函数的情况如下:(注意语句的书写方式,首先是创建了agecat变量,并将每一行都设置为缺失值,后面的语句依次执行,写成一行会出错。)
4.4变量的重命名
如果对现有的某些变量名称不满意,你可以交互地或者以编程的方式修改它们。
比如你希望将变量名manager修改为managerID,将date修改为testDate,
001.那么可以使用语句:fix(leadership)来调用一个交互式的编辑器。
编辑后运行的结果如下:
002.或者使用names()函数来重命名变量。
003.又或者如下:
004.可以使用plyr包中的rename()函数,可用于修改变量名。使用代码如下:
4.5缺失值
在R中,缺失值以符号NA(NotAvailable,不可用)表示。R中字符型和数值型数据使用相同的缺失值符号。
is.na()函数可用于检测缺失值是否存在。比如:
x<-c(1,2,3,NA)
is.na(x)
将返回c(FALSE,FALSE,FALSE,TRUE)。
判断leadership中的缺失值:
值得注意的是:第一,缺失值是不可比较的,即便是与缺失值自身的比较。第二,R并不把无限的或者不可能出现的数值标记成缺失值。比如正无穷和负无穷分别用Inf和–Inf所标记。
4.5.1重编码某些值为缺失值
leadership示例中,缺失的年龄值被编码为99,即让R明白示例中的99表示缺失值。
leadership$age[leadership$age==99]<-NA,就是通过重编码完成。即任何等于99的年龄值都将被修改为NA。
4.5.2在分析中排除缺失值
001.使用na.rm=TRUE,先排除缺失值在进行分析工作
002.na.omit()函数可以可以删除所有含有缺失数据的行。如下图:
删除所有含有缺失数据的观测(称为行删除,listwisedeletion)是处理不完整数据集的若干手段之一。
4.6日期值
日期值通常以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量。as.Date()函数用于执行这种转化。其语法为as.Date(x,"input_format"),其中x是字符型数据,input_format则给出了用于读入日期的适当格式。
001.leadership改变日期格式代码
002.Sys.Date()函数可以返回当天的日期,而date()函数则返回当前的日期和时间。
003.使用函数format(x,format="output_format")来输出指定格式的日期值,并且可以提取日期值中的某些部分:
004.使用difftime()函数计算时间间隔等:(那么我是周几出生的呢?TodayisSunday)
4.6.1将日期转换为字符型变
as.character()函数可将日期值转换为字符型:strDates<-as.character(dates)
4.7类型转换
is.datatype()函数返回TRUE或FALSE,而as.datatype()这样的函数则将其参数转换为对应的类型。
4.8数据排序
在R中,可以使用order()函数对一个数据框进行排序。默认的排序顺序是升序。加一个减号即为降序。以下示例使用leadership演示了数据框的排序。
001.语句:
newdata<-leadership[order(leadership$age),]#创建了一个新的数据集,其各行依经理人的年龄升序排序。
002.语句:
attach(leadership)
newdata<-leadership[order(gender,age),]#各行依女性到男性、同样性别中按年龄升序排序
detach(leadership)
003.语句:
attach(leadership)
newdata<-leadership[order(gender,-age),]#将各行依经理人的性别和年龄降序排序
detach(leadership)
4.9数据集的合并
4.9.1向数据框添加列
001.使用merge()函数横向合并两个数据框或数据集。
比如:
total<-merge(dataframeA,dataframeBm,by=”ID”)#将两个数据框按照ID进行了合并
total<-merge(dataframeA,dataframeBm,by=c(”ID”,”Country”)#将两个数据框按照ID和Country进行了合并。
002.用cbind()函数进行横向合并,但必须确保每个对象有相同的行数并以相同的顺序排序。
4.9.2向数据框添加行
使用rbind()函数纵向合并两个数据框或数据集。两个数据框必须拥有相同的变量,但它们的顺序不一定要相同。
比如:total<-rbind(dataframeA,dataframeB)
4.10数据集取子集
学习一些对变量和观测进行保留或删除的若干方法。
001.选入(保留)变量。
比如:newdata<-leadership[,c(6:10)]#从leadership数据框中选择了变量q1、q2、q3、q4和q5,并将它们保存到newdata中。将行下标留空(,)表示默认选择所有行。
语句:
myvars<-c(“item1”,”item2”,”item3”,”item4”,”item5”)
newdata<-leadership[myvars]的作用和上面代码实现的结果一样。
002.剔除(丢弃)变量
003.选入或剔除观测是数据分析和数据准备的一个关键方面。
因为“gender“被屏蔽的缘故,执行结果......(原因还在查询中)。
将leadership数据框研究范围限定在2009年1月1日到2009年12月31日之间。
004.subset()函数,更为简便的方法。
004.随机抽样
使用sample()函数能够从数据集中(有放回或无放回地)抽取大小为n的一个随机样本。
从leadership数据集中随机抽取一个大小为3和2的样本:
4.11使用SQL语句操作数据框
SQL——结构化查询语言。
本章总结:
1.使用算术、逻辑运算符进行创建新变量和变量重编码
2.日期转换和缺失值的处理
3.数据的排序、数据集的合并和取子集
4.选入和丢弃变量