第四、第五章都是说的数据管理,合并在一起做个总结,在个人看来,数据管理是一件非常繁琐的事情,但是,每个统计的前提都是一个合适的数据样本,对的,“合适”,做到合适可不是一个简单的事情。
本文就不分基本和高级两部分了,合在一起写吧。
首先,我们建立一个数据框,这个数据框的数据来源可以随意,我直接使用书上面的例子吧。(PS:markdown和R的脚本,一大堆的#号~简直想死的心都有了~)
首先是数据框建立
manager
date
gender
age
q1
q2
q3
q4
q5
leadership
得到一个数据框如下:
从表中看出,有日期是“月/日/年”,我想作为一个中国人,是绝对看不惯这种日期的,别的不说,我就问一句,在不知道格式的情况下,他们是怎么区分“01/02/03”是什么鬼日期?有年龄是99的,还不退休?有q4和q5是空着的,调查表经常会碰到这种不填的行为,没办法,只能认了,删除or接受or修改后接受?看需求了。
OK,让我们来直接使用敲代码的方式去引入本章的内容!
基本数据管理
创建变量(把q1和q2,q2和q3的和和平均值求出来)
直接使用
使用within函数简化输入,和with不同的是,within可以修改数据框
leadership$q1q2
leadership
使用transform(数据框对象,新列名1=公式1,新列名2=公式2……)
leadership
变量重编码(替换99岁那家伙,把年龄分组),先替换年龄
leadership$age[leadership$age==99]
然后分组,建立一个新变量来处理分组后的分组类别
leadership
agecat
agecat[age>55]
agecat[age>=35 & age<55]
agecat[age<35]
再然后重命名数据框内的变量,注意,是数据框内的变量,又叫字段字,有两个方法
1、是reshape的rename方法
install.packages("reshape")
library(reshape)
leadership
2、names方法(与上述方法等效,选择一个即可)
names(leadership)[1:2]
缺失值的简单处理,书上说,后面有更复杂精妙的处理方法-_-!
首先判断缺失值,它不是一个值,只能使用is.na()函数来判断
is.na(leadership[,6:10])
然后标记缺失值,使用NA即可,如上述修改年龄(即变量重编码)的方式修改,这里就不重复了
排除缺失值(在多数统计函数中,有na.rm=TRUE的方式去排除缺失值,默认是不排除的,下面两句的计算结果是不同的,支持与否看具体函数的help)
sum(leadership$q4)
sum(leadership$q4,na.rm=TRUE)
删除含有缺失值的行(你要把它赋值到变量,不然没用,如果这都不理解,说明基础还不过关,回头复习吧,骚年~)
na.omit(leadership)
日期值处理
我们在看leadership数据框的时候发现日期这一个变量还是char类型,不是日期类型,所以,我们要告诉R,这个变量是日期。什么,怎么看类型?来来来,一锤子把电脑磕开就可以看到了
首先要明白日期格式,这里看下面的附表吧,在这里要用到的是%y(后两位年份),%m(两位月份),%d(两位日期)
leadership$testDate
日期值的默认格式是”2016-09-15”,你告诉了R,那个字段是日期,它的格式是什么,这样,之后无论你用什么格式奇葩格式表示日期,R都能认识了,比如“日日日日日日月年”什么的~
再介绍几个用得着的函数
Sys.Date() #当前日期“yyyy-mm-dd"格式
date() #当前日期时间"%a %b %d %H:%M:%S %Y",虽然有用,但是又是一个奇葩格式,面貌,我目前没有找到怎么把它转换成日期的方式,求大神解释
Sys.time() #当前日期时间"%Y-%m-%d %H:%M:%S CST"
日期是可以进行加减运算的!但是两日期差异运算要求两者具有的精度是日期,不能包含时分秒,要使用时分秒运算,需要使用difftime来计算。
Sys.Date()-as.Date("2016-12-11")
difftime(Sys.Date(),as.Date("2016-12-11"),units = "mins")
关于日期函数的处理,有一个天大的坑在这里,如果你的操作系统的日期格式是中文的,用Sys.getlocale(“LC_TIM