第四章 基本数据管理
4.2 创建新变量
变量名<-表达式
在数据框中创建新变量:
eg.在mydata数据框中创建sumx列,值为x1列和x2列相应元素的和
1、
mydata<-data.frame(x1 = c(2,2,2,4), x2 = c(3,4,2,8))
mydata$sumx<-mydata$x1 + mydata$x2
2、
attach(mydata)
mydata$sumx<-x1+x2
3、使用transform()函数
mydata<-transform(mydata,sum=x1+x2)
4.3 变量的重编码
eg. 将99岁年龄值重编码为缺失值
leadership$age[leadership$age==99]<-NA
eg. 将大于75岁年龄值设为“Elder”存入新变量agecat中
leadership$agecat[leadership$age>75]<-"Elder"
eg. 使用within()函数综合上面两条代码
leadership<-within(leadership,{
agecat<-NA
agecat[age>75]<-"Elder"})
4.4 变量的重命名
1、fix(mydata)
调用一个交互式编辑器修改变量名
2、names(mydata)[2]<-“testDate”
使用names()函数重命名变量
3、rename(mydata,c(oldname=“newname”,oldname=“newname”,…))
使用plyr包中rename()函数修改变量名
4.5 缺失值
p.s. R中字符型和数值型数据使用的缺失值符号都是NA
函数is.na()检测缺失值是否存在
p.s. 正无穷Inf 负无穷-Inf 不可能的值NaN
缺失值处理:
1、在数值函数中使用na.rm=TRUE选项,可以在计算之前移除缺失值,用剩余值计算
x <- c(1, 2, NA, 3) y <- sum(x, na.rm=TRUE)
2、使用na.omit()函数移除所有含有缺失值的观测
4.6 日期值
将以字符串形式输入到R中的日期值,转化为以数值形式储存的日期变量。
as.Date(x,“input_format”)
p.s. as.Date的默认格式是yyyy-mm-dd
as.character()可以将日期值转化为字符型
4.7 类型转换
4.8 数据排序
order()函数可以对一个数据框进行排序,默认是升序,在变量前加负号可以降序。
attach(leadership)
newdata <-leadership[order(gender, -age),]
detach(leadership)
4.9 数据集的合并
1、merge()函数进行横向联结
total <- merge(dataframeA, dataframeB, by="ID")
2、cbind()函数“直接”进行横向合并,为了正常工作必须有相同行数
total<-cbind(A,B)
3、rbind()函数纵向联结
4.10 数据集取子集
1、选择变量
1)
newdata <- leadership[, c(6:10)]
2)
myvars <- c("q1", "q2", "q3", "q4", "q5")
newdata <-leadership[myvars]
3)使用paste()函数创建与2)中相同的字符型变量
myvars <- paste("q", 1:5, sep="")
newdata <- leadership[myvars]
2、剔除变量
1)
myvars <- names(leadership) %in% c("q3", "q4") newdata <- leadership[!myvars]
(1) names(leadership) 生成了一个包含所有变量名的字符型向量: c(“managerID”,“testDate”,“country”,“gender”,“age”,“q1”, “q2”,“q3”,“q4”,“q5”)。
(2) names(leadership) %in% c(“q3”, “q4”) 返回了一个逻辑型向量, names(leadership)中每个匹配q3或q4的元素的值为TRUE,反之为FALSE:c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE)。
(3) 运算符非(!)将逻辑值反转:c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE)。
(4) leadership[c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE)]选择了逻辑值为TRUE的列,于是q3和q4被剔除了。
2)如果知道要剔除的变量的列数
newdata <- leadership[c(-8,-9)]
3)
leadership$q3 <- leadership$q4 <- NULL
3、选入观测
newdata <- leadership[leadership$gender=="M" & leadership$age > 30,]
newdata <- leadership[which(leadership$date >= startdate & leadership$date <= enddate),]
4、subset()函数
5、随机抽样
sample()函数可以从数据集中抽取大小为n的一个随机样本
eg. 从leadership数据集中随机抽取一个大小为3的样本
mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE),]
p.s. 第一个参数是一个由要从中抽样的元素组成的向量
第二个参数是要抽取的元素数量
第三个参数表示无放回抽样