R语言是面向数据科学的编程语言,它支持多种数据类型,而且还可以根据用户的需要来定义新的数据类型。这里,我们介绍比较基本的数据类型,即数值型、逻辑型、字符型和因子型。
数值型数据是最常见的数据,如12345、99999等。我们可以使用
class
函数来探查数据的类型:
class(12345)
## [1] "numeric"
实际上,数值型数据还可以分为两种类型,即整数型(integer)和双精度型(double)。一般在R语言中输入数字,会被自动认为双精度型。我们可以使用
typeof
函数进行查看:
typeof(1)
## [1] "double"
typeof(1.0)
## [1] "double"
两者都被识别为双精度类型,如果需要声明使用的数据是整数型,那么需要在数值后面加上
L
:
typeof(1L)
## [1] "integer"
逻辑型数据是用于进行条件判断的数据类型,只有两种数值,即真(TRUE)和假(FALSE),在R语言中分别可以使用T和F表示。要获得逻辑值,可以使用比较的操作符,如大于(>)、大于或等于(>=)、小于(<)、小于或等于(<=)、等于(==)、不等于(!=)。下面用代码进行演示:
1 > 0
## [1] TRUE
1 > 3
## [1] FALSE
2 == 2
## [1] TRUE
2 != 2
## [1] FALSE
4 <= 5
## [1] TRUE
逻辑型数据是
if
语句接收条件的数据类型,在R语言中用途非常广泛。可以使用
class
函数来查其数据类型:
class(1 > 0)
## [1] "logical"
可以看到,显示的是逻辑型数据(logical)。需要进行特别声明的是,在R语言中缺失值(NA)的数据类型也被归为逻辑型数据,在做分析的时候需要特别注意:
class(NA)
## [1] "logical"
所有文本类型的数据都属于字符型,如“abc”“复旦大学”,在R语言中需要在前后附上双引号或单引号进行定义。查看其数据类型:
class("abc")
## [1] "character"
class("复旦大学")
## [1] "character"
可以看到,它们都属于字符型(character)。字符型数据也可以相互比较,一般而言我们可以使用“==”或“!=”符号来判断两个文本是不是完全一致:
"hope" == "hope"
## [1] TRUE
"hope" != "Hope"
## [1] TRUE
因子型数据是R语言中非常特殊的一种数据类型,它可以被视为把字符型数据以数值型保存的特殊格式:
# 利用factor函数创造因子变量
a = factor("男")
a
## [1] 男
## Levels: 男
class(a)
## [1] "factor"
由于字符型数据往往占用内存较大,如果有很多重复的字符,那么利用数字来对字符进行标记,然后直接保存数值、数值与字符的对应关系,这样就可以节省内存。这提高了计算性能,但是也给分析带来了一些麻烦,需要额外注意。这里,我们使用
as
系列函数来进行强制类型转换,看看因子变量的字符形态和数值形态分别是什么:
as.numeric(a)
## [1] 1
as.character(a)
## [1] "男"
我们可以看到,其数值由
1
来记录,而所记录的字符则为“男”。
数据类型的判断和转换可以分别使用
is
系列函数和
as
系列函数进行实现。例如,我们要判断一个数据是否为数值型,就可以使用
is.numeric
函数进行实现:
is.numeric(12345)
## [1] TRUE
is.numeric("hello")
## [1] FALSE
可以看到,返回的数据是逻辑型,告诉用户这个变量是否属于数值型。在2.3.4节中,我们尝试对因子变量进行数据类型的转换,但实际上不是所有数据都可以相互转换的。例如数值型数据都可以转换为字符型,但是字符型的变量却不能够直接转换为数值型(会返回缺失值NA,并输出警告):
as.character(12345)
## [1] "12345"
as.numeric("hello")
## Warning: NAs introduced by coercion
## [1] NA