- 本章内容:操作日期和缺失值 熟悉数据类型的转换 变量的创建和重编码 数据集的排序、合并和取子集 选入会让丢弃变量
4.1一个例子
- 问题背景:男性和女性在领导企业方式上的不同
#创建leadership数据框
> manager <- c(1,2,3,4,5)
> data <- 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,data,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors=FALSE)
4.2创建新变量
- 创建新变量或者对现有的的变量进行变换是有必要的
- 变量名 <- 表达式(表达式部分可以包含多种运算符和函数)
#创建了一个名为mydata的数据框,其中的两个变量x1和x2:
sunx <- mydata$x1 + mydata$x2
meanx <- (mydata$x1 + mydata$x2/2
#此时得到mtdata和两个独立变量:sumx和meanx,希望将两个新的变量合并到原始数据框
使用一下代码实现:
#创建新变量
> mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
> mydata$sumx<-mydata$x1+mydata$x2
> mydata$meanx<-(mydata$x1+mydata$x2)/2
> attach(mydata)
> mydata$sumx<-x1+x2
> mydatameanx<-(x1+x2)/2
> detach(mydata)
>
> mydata<-transform(mydata,sumx=x1+x2,meanx=(x1+x2)/2)
4.3变量的重编码
- 重编码涉及根据同一个变量和或其他变量的现有价值创建新值的过程,比如:
- 将一个连续型变量修改为一组类别值
- 将误编码的值替换为正确的值
- 基于一组分数线创建一个表示及格/不及格的变量
比如:将leadership数据集的经纪人年龄变量age重编码为类别型变量agecat(young、middle aged、elder)
leadership <- within(leadership,(agecat <- NA ,agecat [age >75] <- "elder",agecat [age >= 55 & age <= 75] <- "middle aged", agecat [age < 55] <- 'young'))
4.4变量的重命名
- fix(leadership)#调用一个交互式的编辑器,修改变量名
- names()函数重命名变量
names(leadership[2] <- "testDate")#将date修改为testDate
- rename()函数修改变量名,先要安装plyr包,它拥有一系列强大的数据集操作函数
library(plyr)
leadership <- rename(leadership,c(manger="mangerID",data="testDate"))
4.5缺失值
- is.na()允许检测缺失值是否存在
> y<-c(1,2,3,NA)
> is.na(y)
[1] FALSE FALSE FALSE TRUE
4.5.1重编码某些缺失值
- 使用赋值语句将某些值重编码为缺失值
- leadership$age[leadership$age == 99] <- NA
4.5.2在分析中排除缺失值
- na.omit() 移除所有缺失值的观测,可以删除所有含有缺失数据的行
- 如果缺失值遍布于整个数据中就需要别的办法
4.6日期值
4.7类型转换
- 向一个数值型向量中添加一个字符串会将此向量中的所有元素转换为字符型
> a<-c(1,2,3)
> a
[1] 1 2 3
> is.numeric(a)
[1] TRUE
> is.vector(a)
[1] TRUE
> a<-as.character(a)
> a
[1] "1" "2" "3"
> is.numeric(a)
[1] FALSE
> is.vector(a)
[1] TRUE
> is.character(a)
[1] TRUE
>
4.8数据排序
- order函数对一个数据框进行排序,默认升序,加上-号,降序。
4.9数据集的合并
4.9.1向数据框添加列
- merge()函数,横向合并两个数据框(数据集),两个数据框是通过一个或者多个共有变量联结
- total <- merge(dataframeA,dataframeB,by=("ID","Country")
- cbind()函数,直接横向合并两个矩阵或者数据框,不需要指定一个公共索引
- total <- cbind(A,B)#横向合并对象A和B,每个对象拥有相同的行数
4.9.2向数据框添加行
- rbind()函数,纵向合并两个数据框,两个数据框拥有相同的变量
- total<-rbind(dataframeA,dataframeB)
- 合并之前需要删除A中多余变量,在dataframeB中创建追加的变量
4.10 数据集取子集
4.10.1 选入(保留)变量
- 从一个大数据集中选择有限数量的变量来创建一个新的数据集
- myvars<-c("q1","q2","q3","q4","q5")
- newdata<-leadership(myvars)
4.10.2剔除(丢弃)变量
- myvars <- names(leadership) %in% c("q3","q4")
- newdata<-leadership[!myvars]#剔除变量q3和q4
4.10.3 subset()函数
- subset()函数选择变量和观测最简单方
- newdata<-subset(leadership,age>=35|age<24,select=c(q1,q2,q3,q4))#保留复合条件的q1到q4
- newdata<-subset(leadership,gender=="M"&age>25,select=gender:q4)
4.10.4随机抽样
- mysample <- leadership[sample(1:nrow(leadership),3,replace=FALSE),]
- sample()函数返回随机抽样得到的元素
4.11使用SQL语句操作数据框(等学完再看)