参考资料:R语言实战【第2版】
创建分析用数据集:
manager<-c(1,2,3,4,5)
date<-c('10/24/08','10/28/08','10/1/08','10/12/08','5/1/09')
country<-c('US','US','UK','UK','UK')
gender<-c('M','F','F','M','F')
age<-c(32,45,25,39,99)
q1<-c(5,3,3,3,2)
q2<-c(4,5,5,3,2)
q3<-c(5,2,5,4,1)
q4<-c(5,5,5,NA,2)
q5<-c(5,5,2,NA,1)
leadership<-data.frame(manager,date,country,gender,age,
q1,q2,q3,q4,q5,stringsAsFactors = FALSE)
1、创建新变量
在项目研究中,我们经常需要创建新变量或者对现有的变量进行变换。可以通过以下形式的语句来完成:
变量名<-表达式
下面的表达式中的运算符含义:
+:加
-:减
*:乘
/:除
^或**:求幂
x%%y:取余数,5%%2的结果为1。
x%/%y:取整数,5%/%2的结果为2。
# 创建新变量
mydata<-data.frame(x1=c(2,2,6,4),
x2=c(3,4,2,8))
# 方法1
mydata$sumx<-mydata$x1+mydata$x2
mydata$meanx<-(mydata$x1+mydata$x2)/2
# 方法2
attach(mydata)
mydata$sumx1<-x1+x2
mydata$meanx1<-(x1+x2)/2
detach(mydata)
# 方法3【推荐】
mydata<-transform(mydata,
sumx2=x1+x2,
meanx=(x1+x2)/2)
mydata
2、变量的重编码
重编码涉及根据同一个变量和/或其他变量的现有值创建新值得过程。例如我们可以:①将一个连续型变量修改为一组类别值;②将误编码的值替换为正确值;③基于一组分数线创建一个表示及格/不及格的变量。
运算符 | 描述 |
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 严格等于 |
!= | 不等于 |
!x | 非x |
x|y | x或y |
x&y | x和y |
isTRUE(x) | 测试x是否为TRUE |
# 将leadership中的年龄为99的值重编码为缺失值
leadership$age[leadership$age==99]<-NA
# 将年龄列重编码为分类数据
leadership$agecat[leadership$age>75]<-'Elder'
leadership$agecat[leadership$age>=55 & leadership$age<=75]<-'Middle Aged'
leadership$agecat[leadership$age<55]<-'Young'
# 紧凑的表达方式如下:
leadership<-within(leadership,{
agecat<-NA
agecat[age>75]<-'Elder'
agecat[age>=55 & age<=75]<-'Middle Age'
agecat[age<55]<-'Young'
})
leadership
3、变量的重命名
如果对现在的变量名称不满意,我们可以对变量名称进行修改。可以通过names()函数来重命名变量。如下:
names(leadership)[2]<-'testDate'
names(leadership)
names(leadership)[2]<-'testDate'
names(leadership)[6:10]<-c('item1','item2','item3','item4','item5')
library(plyr)
leadership<-rename(leadership,
c(manager='managerID'))
names(leadership)
4、缺失值
在R中,缺失值以符号NA(Not Available,不可用)表示。在R中字符型和数值型数据局使用的缺失值符号是相同的。我们可以用is.na()函数来检测是否存在缺失值。
y<-c(1,2,3,NA)
is.na(y)
is.na(leadership[,6:10])
在处理缺失值时,需注意:①缺失值被认为是不可比较的,即便是与缺失值自身的比较。这就意味着无法使用比较运算符来检测缺失值是否存在。②R并不把无限的或不可能出现的数值标志为缺失值。
(1)重编码某些值为缺失值
我们可以使用赋值语句将某些值重编码为缺失值。如:
leadership$age[leadership$age==9]<-NA
(2)在分析中排除缺失值
确定了缺失值的位置后,我们在进一步的分析数据之前可能需要以某种方式删除这些缺失值。原因是:含有缺失值的算术表达式和函数的计算的结果也是缺失值。
# 创建数据
x<-c(1,2,NA,3)
y<-x[1]+x[2]+x[3]+x[4]
z<-sum(x)
y
z
z<-sum(x,na.rm=TRUE)
z
我们也可是通过函数na.omit()移除所有含有缺失值的观测。na.omit()可以删除所有含有缺失数据的行。
leadership
newdata<-na.omit(leadership)
newdata
删除所有含有缺失数据的观测(称为行删除,listwize deletion)是处理不完整数据集的若干手段之一。如果只有少数缺失值或者缺失值尽集中与一小部分观测中,行删除不失为解决缺失值问题的一种手段。但如果缺失值遍布于数据之中,或者一小部分变量中包含大量的缺失数据,行删除可能会剔除相当比例的数据。