约翰霍普金斯大学数据科学系列课程——R语言:数据类型

1.原子对象

R语言有5类最基本的原子对象:

1)  字符型character

字符型对象用” ”包括。

2)  数值型numeric(real numbers)

数字对象在R中默认为数值型(numeric),如果你需要指定一个数据为整数型,需要在改数字后加上L。如:数字123默认为numeric型,如果需要其为integer型,可表示为123L。

3)  整数型integer

4)  复数型complex

复数的实部用实数表示,虚部用实数+i表示。如:3+2i,2+1i等。

5)  逻辑型logical(True/False)

注:R语言中还有几类特殊对象:

  •  Inf\-Inf(infinity)表示正负无穷大

<span style="font-size:18px;"><span style="font-size:18px;">> 1/0
[1] Inf
> -1/0
[1] –Inf</span></span>

  • Na(not available)表示缺失值
NaN(not anumber)表示无意义值
<span style="font-size:18px;"><span style="font-size:18px;">> 0/0
[1] NaN</span></span>

2.赋值与注释

R中赋值采用指向符号“<-”表示,很形象,但是需要按住shift键才能打出符号“<”,并且赋值符号由两个字符组成,因此写代码时非常不方便。

R语言用两个“##”进行注释,##后的代码不被执行,作用域在改行内有效。

<span style="font-size:18px;"><span style="font-size:18px;">> x<-c(1,2,3)##y<-4 
> x
[1] 1 2 3
> y
错误: 找不到对象'y'</span></span>

3.向量(vector)

R中向量可以用函数c()(concatenate)创建向量,同一向量内的对象类型必须相同:

<span style="font-size:18px;"><span style="font-size:18px;">> x <- c(0.5, 0.6) ## numeric
> x <- c(TRUE, FALSE) ## logical
> x <- c(T, F) ## logical
> x <- c("a", "b", "c") ## character
> x <- 9:29 ## integer
> x <- c(1+0i, 2+4i) ## complex</span></span>

也可以用函数vector()初始化向量:vector(“datatype”, length=length_of_vector)

<span style="font-size:18px;"><span style="font-size:18px;">> x<-vector("integer",length=5)
> x
[1] 0 0 0 0 0
> y<-vector("character",length=5)
> y
[1] "" "" "" "" ""</span></span>

4.最低共有特性(least common denominator)

在同一个向量中,如果有不同类型的对象,R不会报错,而是遵守低共有特性,将高类型的对象向低类型转换。

<span style="font-size:18px;">> x<-c(TRUE,2,1.2,3+2i,"Hello")
> x
[1] "TRUE"  "2"     "1.2"   "3+2i"  "Hello"##
> x<-c(TRUE,2,1.2,3+2i)
> x
[1] 1.0+0i 2.0+0i 1.2+0i 3.0+2i
> x<-c(TRUE,2,1.2)
> x
[1] 1.0 2.0 1.2
> x<-c(TRUE,2)
> x
[1] 1 2</span>

由上例可以看出,基本对象等级由高至低排序为:logic、integer、numeric、complex、character。


5.类型强转

R通过as.datatype(object)函数将对象类型进行强制转换,转换原则也遵循高等级对象可转换为低等级,而低等级对象不能转换为高等级(转换时会丢失数据信息)。

<span style="font-size:18px;">> x <- 0:6
> class(x)
[1] "integer"
> as.numeric(x)
[1] 0 1 2 3 4 5 6
> as.logical(x)
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE
> as.character(x)
[1] "0" "1" "2" "3" "4" "5" "6"
> as.numeric(x)
[1] NA NA NA
警告信息:
强制改变过程中产生了NA
> x<-3+2i
> as.numeric(x)
[1] 3
警告信息:
强制改变时丢弃了虚数部分</span>


6.矩阵

矩阵是二维数组,矩阵中的对象具有相同的类型,可以通过函数matrix创建矩阵,格式为:

m<-matrix(vector,nrow=number_of_rows,ncol=number_of_columns,byrow=logic_value)

<span style="font-size:18px;">> m<-matrix(nrow=2,ncol=3)
> m
     [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA
> m<-matrix(1:6,nrow=2,ncol=3)
> m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6</span>

矩阵是默认按列填充的,如果需要矩阵按行填充,需要将byrow属性设置为TRUE。

<span style="font-size:18px;">> m<-matrix(1:6,nrow=2,ncol=3,byrow=TRUE)
> m
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
</span>

也可以先创建向量,再通过dim()函数将该向量中的对象加入指定矩阵:

<span style="font-size:18px;">> a<-c(2,3)
> a
[1] 2 3
> m<-c(1,2,3,4,5,6)
> dim(m)<-c(2,3)
> m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
</span>

dim()函数也可以用来查看矩阵的维度:

<span style="font-size:18px;">> dim(m)
[1] 2 3
</span>

矩阵也可以通过函数cbind()和rbind()函数将向量合并成矩阵:

<span style="font-size:18px;">> x<-c(1,2,3)
> y<-c(4,5,6)
> z<-c(7,8,9)
> cbind(x,y)
     x y
[1,] 1 4
[2,] 2 5
[3,] 3 6
> rbind(x,y)
  [,1] [,2] [,3]
x    1    2    3
y    4    5    6
> rbind(x,y,z)
  [,1] [,2] [,3]
x    1    2    3
y    4    5    6
z    7    8    9
</span>


7.列表

列表(list)是一种特殊的向量,list可以包含不同类型的对象,甚至包括向量对象和矩阵对象等。列表中每个对象之间用逗号隔开,每个对象索引号用双“[[]]”表示,而每个对象中的元素用单“[]”表示。

<span style="font-size:18px;">> x<-list("hello",1:4L,3.2,4+5i,TRUE)
> x
[[1]]
[1] "hello"

[[2]]
[1] 1 2 3 4

[[3]]
[1] 3.2

[[4]]
[1] 4+5i

[[5]]
[1] TRUE
</span>


8.因子(factor)

因子一般用来表示分类数据,数据既可以是有序的,也可以是无序的。使用factor表示分类标签比较直观,例如使用“male”“female”优于使用1,2这样的数量值去表示。

<span style="font-size:18px;">> x <- factor(c("yes", "yes", "no", "yes", "no"))
> x
[1] yes yes no  yes no 
Levels: no yes
> table(x)
x
 no yes 
  2   3
</span>

levels中对象的顺序,也可以通过参数levels自定义。

<span style="font-size:18px;">> x <- factor(c("yes", "yes", "no", "yes", "no"),levels=c("yes","no"))
> x
[1] yes yes no  yes no 
Levels: yes no
</span>


9.缺失值

is.na()用于测试对象是否为NA,is.nan()用于测试对象是否为NaN。NA是NaN,但NaN不是NA,NaN比Na程度更深。

<span style="font-size:18px;">> b<-c(1,2,3,NA,4)
> is.na(b)
[1] FALSE FALSE FALSE  TRUE FALSE
> is.nan(b)
[1] FALSE FALSE FALSE FALSE FALSE
> b<-c(1,2,3,NaN,4)
> is.na(b)
[1] FALSE FALSE FALSE  TRUE FALSE
> is.nan(b)
[1] FALSE FALSE FALSE  TRUE FALSE
</span>


10.数据框

数据框用来储存tabular数据,用data.frame()创建。可以将数据框看作特殊的list集合,每个list长度相同且对应位置的数据类型相同。

<span style="font-size:18px;">> x<-data.frame(a=1:4,b=c("a","b","c","d"))
> x
  a b
1 1 a
2 2 b
3 3 c
4 4 d
> nrow(x)
[1] 4
> ncol(x)
[1] 2
</span>


11.命名

R可以通过函数names()给想了对象命名,通过dimnames()给矩阵命名,同样也可以给列表命名:

<span style="font-size:18px;">> x<-c(1,2,3,4)           ##给向量命名
> names(x)<-c("one","two","three","four")
> x
  one   two three  four 
1     2     3     4
> names(x)
[1] "one"   "two"   "three" "four"
> y<-list(one=1,two=2,three=3)   ##给列表命名
> y
$one
[1] 1

$two
[1] 2

$three
[1] 3
> m<-matrix(1:4,nrow=2,ncol=2)
> m
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> dimnames(m)<-list(c("one","two"),c("three","four"))
> m
    three four
one     1    3
two     2    4
</span>
















郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。