约翰霍普金斯大学数据科学系列课程——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)表示缺失值
<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>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。