数据对象转换

2018-08-31

2018-08-31
数据结构-数据类型的转换

  R编程中对数据进行加工处理时常涉及算术运算问题,要求数据具有相同或者兼容的存储类型。   例如,整数型和双精度型是兼容的,字符串行和整数型却不兼容。因此数据的存储类型转换很有必要。数据结构类型表如下所示:

数据存储类型 含义 判别数据变量函数 转换数据变量函数
numeric 数字型 is.numeric(数据变量名) as.numeric(数据变量名)
integer 整数型 is.integer(数据变量名) as.integer(数据变量名)
double 双精度型 is.double(数据变量名) as.double(数据变量名)
character 字符串型 is.character(数据变量名) as.character(数据变量名)
logical 逻辑型 is.logical(数据变量名) as.logical(数据变量名)
complex 复数型 is.complex(数据变量名) as.complex(数据变量名)

1 数据存储类型


为了进行统计分析,会将连续变量离散化等操作,有时就需要将数据存储类型进行转换

1.1 判断数据对象存储类型

判断数据存储类型有两种,

1)is.函数判断存储类型名

函数格式:is.存储类型名(数据对象名)

a<-66.64 # 创建数值型向量,属于数值型
is.numeric(a)# 存储类型为数值型
## [1] TRUE

整数型的判断

is.integer(a) #存储类型不是整数型
## [1] FALSE

双精度型判断

is.double(a)  #存储类型是双精度型
## [1] TRUE

字符型判断

is.character(a)  #存储类型不是字符型
## [1] FALSE

逻辑型判断

is.logical(a)  #存储类型不是逻辑性
## [1] FALSE

2)typeof可以直接判断出数据对象的存储类型

函数格式:typeof(数据对象名)

typeof(a)# 显示a的存储类型
## [1] "double"

1.2 数据对象存储类型转换

通过as.存储类型名函数将数据对象存储类型转换为指定类型

函数格式为:as.存储类型名(数据对象名)

a<-66.6
typeof(a)# 显示a的存储类型
## [1] "double"

将双精度性转换为整数型

(a<-as.integer(a))
## [1] 66

显示a的存储类型

typeof(a)
## [1] "integer"

2 数据结构类型


数据对象结构类型转换包括:向量和矩阵以及向量与因子之间的转换

2.1 向量与矩阵转换

创建包含5个元素的向量a

(a<-c(1:5)) 
## [1] 1 2 3 4 5

由向量a派生成矩阵b

(b<-matrix(a,nrow=5,ncol=4,byrow=TRUE))
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    1    2    3
## [3,]    4    5    1    2
## [4,]    3    4    5    1
## [5,]    2    3    4    5

将向量a转换为5行1列的矩阵

(a<-as.matrix(a)) 
##      [,1]
## [1,]    1
## [2,]    2
## [3,]    3
## [4,]    4
## [5,]    5

判断a是否为矩阵

is.matrix(a)
## [1] TRUE

将矩阵b转换为向量b

(b<-as.vector(b)) 
##  [1] 1 5 4 3 2 2 1 5 4 3 3 2 1 5 4 4 3 2 1 5

判断b是否为向量

is.vector(b) 
## [1] TRUE
  • 向量转换为矩阵时,矩阵默认只有1列,行数还是等于原来的元素个数。

  • 矩阵转换为向量时,以列为单位依次从左到右读取矩阵的数据

2.2 向量转换为因子

1)as.factor函数可以将向量转换为因子

基本格式为:as.factor(向量名)

创建包含4个元素的字符串向量X

(X<-c("不及格","及格","良好","优秀"))
## [1] "不及格" "及格"   "良好"   "优秀"

判断X是否为向量

(is.vector(X)) 
## [1] TRUE

将向量X转换为因子

(Y<-as.factor(X)) 
## [1] 不及格 及格   良好   优秀  
## Levels: 不及格 及格 良好 优秀

判断Y是否为因子

(is.factor(Y)) 
## [1] TRUE

查看Y的存储类型

typeof(Y)  
## [1] "integer"

2)参数labels重设类别值

函数格式为:

factor(向量名,levels=c(类别值列表),labels=c(类别值列表))

参数levels是原类别值,labels为新类别值,彼此一一对应。

X<-c("50","60","80","98")  # 创建向量X
(Y<-factor(X,levels=c("50","60","80","98")))  #转换为因子
## [1] 50 60 80 98
## Levels: 50 60 80 98

因子水平值的重设类别

(Y<-factor(X,levels=c("50","60","80","98"),labels=c("不及格","及格","良好","优秀")))
## [1] 不及格 及格   良好   优秀  
## Levels: 不及格 及格 良好 优秀
  • 通过参数levels和labels,将原类别值“50”,“60”,“80”,“90”依次替换为“不及格”,“及格”,“良好”,“优秀”。