数据对象转换
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”依次替换为“不及格”,“及格”,“良好”,“优秀”。