在线咨询
QQ咨询
服务热线
服务热线:13125520620
TOP

R实战 第三篇:数据处理(基础)

发布时间:2018-3-5 浏览:3112

在实际分析数据之前,必须对数据进行清理和转化,使数据符合相应的格式,提高数据的质量。数据处理通常包括增加新的变量、处理缺失值、类型转换、数据排序、数据集的合并和获取子集等。
 
一,增加新的变量
 
通常需要根据数据框中的现有列,按照特定的公式、业务逻辑,向数据框中新增变量,常用的操作符是:
 
算术运算符是:+ - * /,求模(%%),整除(%/%),
比较运算符是:不等是 !=,相等是 ==,
逻辑运算符与(&)、或(|)和非(!)。
举个例子,有数据框mydata
 
mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
向数据框增加新的变量,通常的做法是:
 
attach(mydata)
mydata$sumx<-x1+x2
mydata$meanx<-(x1+x2)/2
detach(mydata)
另外一个做法是使用transform()函数,该函数只用于数据框:
 
mydata<- transform(mydata
    ,sumx=x1+x2
    ,meanx=(x1+x2)/2)
二,对现有变量重新编码
 
重新编码是根据一个变量或其他多个变量的现有值,对现有的变量重新赋值,常用于把错误的值替换为正确值。重编码语句是:
 
variable[condition] <- expression
该语句仅在condition的值为TRUE时,执行赋值操作:
 
mydata$x1[ mydata$x1<3 ]<- 1
也可以使用更为紧凑的写法
 
mydata<-within(mydata,{x1[x1<3]<- 1})
三,变量的重命名
 
查看数据框的变量名,函数names(df)返回变量名的向量:
 
names(mydata)
重命名现有的变量名,
 
names(df)[index] <- "new name"
names(df)[start:end] <- c("new name"....)
plyr包中有一个rename()函数,可用于修改数据框的变量名,rename()函数的使用格式为:
 
rename(df,c(colname="newname",colname="newname",...))
四,数据框的变量存在缺失值
 
缺失值是指不可用值,以符号NA表示,缺失值是不可比较的,只能使用is.na()检查是否存在缺失值,通过函数na.omit()移除所有含有缺失值的观测。
 
dataset<-within(dataset,{var1<- ifelse(is.na(var1),0,var1)})
dataset<-na.omit(dataset)
举个例子,创建4行3列的矩阵m,并转换为数据框:
 
 
> d <-data.frame(matrix(sample(c(NA, 1:4), 12, replace = TRUE), 4))
> d
  X1 X2 X3
1 NA  4  1
2  1  2 NA
3  1  4  2
4 NA NA  4
 
1,把变量的缺失值替换为默认值
 
替换数据框中变量X1的缺失值,使用within()函数,不会修改数据框的数据,需要把函数返回的结果重新赋值给d对象:
 
 
> d <- within(d,{X1[is.na(X1)] <-0}) 
> d
  X1 X2 X3
1  0  4  1
2  1  2 NA
3  1  4  2
4  0 NA  4
 
2,当变量出现缺失值时,移除观测
 
使用函数 na.omit(),用于把数据框中变量为NA的观测移除,处理的结果中不任意一个观测中都不包含NA的变量值
 
> d <- na.omit(d)
> d
  X1 X2 X3
1  0  4  1
3  1  4  2
五,数据排序
 
对数据框进行排序,常用的函数是order(),默认的排序方向是升序,在排序变量前边加一个减号,按照降序方向排序。
 
该函数返回的结果是特定变量在数据框中的行序号序列,行序号按照升序或降序排列。
 
举个例子,创建一个数据框d:
 
 
> d <-data.frame(matrix(sample(c(1:6), 12, replace = TRUE), 4))
> d
  X1 X2 X3
1  2  1  4
2  4  4  6
3  2  4  2
4  2  2  5
 
按照数据框的变量X3,获取观测的升序排列,依次为:序号为3的观测、序号为1的观测、序号为4的观测和序号为2的观测
 
> order(d$X3)
[1] 3 1 4 2
按照观测的序号的排列,从数据框中按照行序号重新获取数据,就得到按照变量X3升序的有序结果:
 
 
> d[order(d$X3),,]
  X1 X2 X3
3  2  4  2
1  2  1  4
4  2  2  5
2  4  4  6
 
可以把排序操作写的更紧凑点:
 
dataset = dataset[with(dataset, order(var1, -var2)), , ...]
六,数据集的合并
 
把两个数据集合并为一个,这涉及到向数据框中添加列,向数据框中添加行。
 
1,向数据框中添加列
 
向数据框中添加列,可以使用merge()函数,也可以使用cbind()函数,这两个函数的区别是:
 
cbind()函数是根据列进行合并,合并的前提是每个对象拥有相同的行数,以相同的顺序排序。
merge()函数是根据列进行合并,该函数的功能类型关系型数据库的Join命令,不同要求每个对象拥有相同的行数,使用灵活。
Merge函数的语法定义: 
 
merge(x, y, by = intersect(names(x), names(y)),
      by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
      sort = TRUE, suffixes = c(".x",".y"),
      incomparables = NULL, ...)
参数注释:
 
x,y:是进行合并的两个数据框对象;
by:按照两个对象的名称相同的列进行合并;
by.x,by.y:分别指定x对象和y对象匹配的列名;
all:对于不满足匹配条件时,是否保留列值;如果设置为FALSE,那么相当于INNER JOIN命令,返回的结果集只保留匹配成功的数据行;如果设置为TRUE,那么相当于FULL JOIN,保留x和y中不匹配的数据行,并把不匹配的列值设置为NA;
all.x,all.y:分别设置x和y是否保留列值;如果设置all.x=TRUE,all.y=FALSE,那么相当于LEFT JOIN命令,返回的结果集只保留x对象的数据行,不匹配的y对象的数据行行的列值设置为NA;如果设置为all.x=FALSE,all.y=TRUE,那么相当于RIGHT JOIN命令,返回的结果集只保留y对象的数据行,不匹配的x对象的数据行行的列值设置为NA。
sort:返回的结果集是否排序,排序列是by参数的对象
suffixes:后缀名,默认值是c(".x",".y"),当合并的两个对象拥有相同的列名时,R把相同的列名后面加上该后缀名,以唯一区分结果集的列名;
incomparables:不能匹配的值
2,向数据框中添加行
 
使用rbind()函数,根据行进行合并,向数据框中添加数据行,相当于关系型数据库的求求并集。要求两个数据库必须拥有相同名称的变量,而变量的顺序可以不同。
 
七,选取子集
 
1,选择变量
 
从一个数据框中选择有限数量的变量,数据框中的元素是通过dataframe[rows_vector , colunms_vector],如果不设置行的下标(,),表示选择所有行,
 
mydata <- mydata[,c(col,,...)]
2,剔除变量
 
把特定的变量剔除,只选入剩余的变量。操作符 %in% 返回逻辑型向量,用法是:
 
用法 a %in% table  
a值是否包含于table中,为真时输出TURE,为假时输出FALSE 
例如,mydata有四个变量c1,c2,c3,c4,myvars的结果是c(TRUE,FALSE,TRUE,FALSE),对该变量求非(!myvars)之后是 c(FALSE,TRUE,FALSE,TRUE),在根据数据框的下标来选入特定的变量。
 
myvars <- names(mydata) %in% c("c1","c3")
mydata <- mydata[!myvars]
3,选入观测
 
选入观测,可以根据观测的序号来选择,也可以根据特定的条件来选择:
 
mydata <- mydata[1:5,,...]
mydata <- mydata[mydata$c1<=5 & mydata$c2>=20,,...]
还有一个函数which,也能用于选入观测:
 
which(x, arr.ind = FALSE, useNames = TRUE)
which函数返回的是逻辑值的向量,which()函数的用法是:用法which(test),返回test为真值的位置(指针)。
 
4,根据条件选择子集
 
subset()函数是选择数据库的变量和观测最简单的方法,
 
mydata <- subset(mydata, c1<=5 & c2>=20, select=c("c1","c2",,,))
subset()函数的语法是:
 
subset(x, subset, select, drop = FALSE)
参数注释:
 
x:数据框对象
subset:该参数是逻辑表达式,对于数据框而言,该参数作用于数据行,用于选择数据行。
select:要选择的变量构成的向量
drop:逻辑值,要剔除的变量构成的向量
 

TAG
软件定制,软件开发,瀚森HANSEN
0
该内容对我有帮助