在前面学习了创建数据集,导入数据,将数据表示为矩阵或者数据框,但这只是数据准备的第一步,获得的数据多多少少都会有一些小问题,比如有缺省值,需要重新编码,重命名或者转换数据类型等等,这节课就会学习这些基本的数据管理。
为方面研究,先创建一个名为leadership的数据框
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)
leadership
上述代码展现出如下列表:
1.创建新变量
现有一个名为为mydata的数据框,有x1和x2,想要创建一个新的变量存储x1和x2的值,并将其保存到数据框中。
mydata <- data.frame(x1=c(2,3,4,5),x2=c(2,5,7,9))
mydata
mydata$sumx <- mydata$x1+mydata$x2
mydata
2.变量重新编码
将leadership数据框中的99岁的年龄值重编码为缺失值,使用 的代码为:leadership$age[leadership$age == 99] <- NA
接下来可以对不同年龄段的人做“老年人”,“中年人”,“青年人”的区分,其代码为:
leadership$age[leadership$age > 75]<-"老年人"
leadership$age[leadership$age > 55 & leadership$age <=75]<-"中年人"
leadership$age[leadership$age < 55 ]<-"青年人"
leadership
效果如下:
3.修改变量名
如果变量的某个列名觉得不合适,要进行修改,可以采用fix(leadership),出现以下列表,单击表头变量名即可修改
还有一种方法是:使用names(leadership),查出数据框列名,使用names(leadership)[6] <- "question1"改掉第六个“q1”的名字
4.缺省值
在任何规模的项目中,数据都可能由于未作答问题、设备故障或误编码数据的缘故而不完整。 在R中,缺失值以符号NA表示。R提供了一些函数,用于识别包含缺失值的观测。函数is.na()可以检测缺失值是否存在。只能用is.na()判断是否为缺省值。缺省值和任何值相加都是缺省值。使用na.omit()可以删除缺省值,但会把一行都给删掉,所以一般不建议使用
5.日期值
可以将日期变量转换为字符型变量,函数as.character()可将日期值转换为字 符型:strDates <- as.character(dates)
Sys.Date()反应的是当前系统的日期,date()反应的是当前的年月日时分秒
6.数据排序
有些情况下,查看排序后的数据集可以获得相当多的信息。可以使用order()函数对一个数据框进行排序。默认的排序顺序是升序。在排序变量的 前边加一个减号即可得到降序的排序结果。
如将leadership数据框中的年龄按照升序排序 data <- leadership[order(leadership$age)]
7.数据集的合并
横向合并两个矩阵或数据框,使用cbind()函数:total <- cbind(A, B) ;
横向合并两个数据框(数据集),使用merge()函数:total <- merge(dataframeA, dataframeB, by="ID") merge()的作用是:两个数据框是通 过一个或多个共有变量进行内联结;
纵向合并两个数据框(数据集),请使用rbind()函数:total <- rbind(dataframeA, dataframeB) ,两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。
8.数据集取子集
如从leadership数据框中获取q1,q2,q3,q4,q5放在另一个数据集中,采用q<-leadership[,6:10]
还可以将其中的某一部分去除,如x<- leadership[,-2],就将第二列去掉了
将年龄大于35或者小于24岁的q1,q2,q3,q4选出来newdata <- subset(leadership,age>=35 | age<24,select = c(q1,q2,q3,q4))
9.随机取样
可以使用以下语句从leadership数据集中随机抽取一个大小为3的样本:mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE),] ,sample()函数中的第一个参数是一个由要从中抽样的元素组成的向量。在这里,这个向量 是1到数据框中观测的数量,第二个参数是要抽取的元素数量,第三个参数表示无放回抽样。
即表示在5行的leadership数据框中随机取3行