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

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

讲得比较清晰的一篇博文http://blog.csdn.net/linkin1005/article/details/43559783

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)表示正负无穷大

[plain]  view plain copy
  1. <span style="font-size:18px;"><span style="font-size:18px;">> 1/0  
  2. [1] Inf  
  3. > -1/0  
  4. [1] –Inf</span></span>  

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

2.赋值与注释

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

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

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

3.向量(vector)

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

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

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

[plain]  view plain copy
  1. <span style="font-size:18px;"><span style="font-size:18px;">> x<-vector("integer",length=5)  
  2. > x  
  3. [1] 0 0 0 0 0  
  4. > y<-vector("character",length=5)  
  5. > y  
  6. [1] "" "" "" "" ""</span></span>  

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

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> x<-c(TRUE,2,1.2,3+2i,"Hello")  
  2. > x  
  3. [1] "TRUE"  "2"     "1.2"   "3+2i"  "Hello"##  
  4. > x<-c(TRUE,2,1.2,3+2i)  
  5. > x  
  6. [1] 1.0+0i 2.0+0i 1.2+0i 3.0+2i  
  7. > x<-c(TRUE,2,1.2)  
  8. > x  
  9. [1] 1.0 2.0 1.2  
  10. > x<-c(TRUE,2)  
  11. > x  
  12. [1] 1 2</span>  

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


5.类型强转

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

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


6.矩阵

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

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> m<-matrix(nrow=2,ncol=3)  
  2. > m  
  3.      [,1] [,2] [,3]  
  4. [1,]   NA   NA   NA  
  5. [2,]   NA   NA   NA  
  6. > m<-matrix(1:6,nrow=2,ncol=3)  
  7. > m  
  8.      [,1] [,2] [,3]  
  9. [1,]    1    3    5  
  10. [2,]    2    4    6</span>  

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

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

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> a<-c(2,3)  
  2. > a  
  3. [1] 2 3  
  4. > m<-c(1,2,3,4,5,6)  
  5. > dim(m)<-c(2,3)  
  6. > m  
  7.      [,1] [,2] [,3]  
  8. [1,]    1    3    5  
  9. [2,]    2    4    6  
  10. </span>  

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

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

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> x<-c(1,2,3)  
  2. > y<-c(4,5,6)  
  3. > z<-c(7,8,9)  
  4. > cbind(x,y)  
  5.      x y  
  6. [1,] 1 4  
  7. [2,] 2 5  
  8. [3,] 3 6  
  9. > rbind(x,y)  
  10.   [,1] [,2] [,3]  
  11. x    1    2    3  
  12. y    4    5    6  
  13. > rbind(x,y,z)  
  14.   [,1] [,2] [,3]  
  15. x    1    2    3  
  16. y    4    5    6  
  17. z    7    8    9  
  18. </span>  


7.列表

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> x<-list("hello",1:4L,3.2,4+5i,TRUE)  
  2. > x  
  3. [[1]]  
  4. [1] "hello"  
  5.   
  6. [[2]]  
  7. [1] 1 2 3 4  
  8.   
  9. [[3]]  
  10. [1] 3.2  
  11.   
  12. [[4]]  
  13. [1] 4+5i  
  14.   
  15. [[5]]  
  16. [1] TRUE  
  17. </span>  


8.因子(factor)

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> x <- factor(c("yes", "yes", "no", "yes", "no"))  
  2. > x  
  3. [1] yes yes no  yes no   
  4. Levels: no yes  
  5. > table(x)  
  6. x  
  7.  no yes   
  8.   2   3  
  9. </span>  

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> x <- factor(c("yes", "yes", "no", "yes", "no"),levels=c("yes","no"))  
  2. > x  
  3. [1] yes yes no  yes no   
  4. Levels: yes no  
  5. </span>  


9.缺失值

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> b<-c(1,2,3,NA,4)  
  2. > is.na(b)  
  3. [1] FALSE FALSE FALSE  TRUE FALSE  
  4. > is.nan(b)  
  5. [1] FALSE FALSE FALSE FALSE FALSE  
  6. > b<-c(1,2,3,NaN,4)  
  7. > is.na(b)  
  8. [1] FALSE FALSE FALSE  TRUE FALSE  
  9. > is.nan(b)  
  10. [1] FALSE FALSE FALSE  TRUE FALSE  
  11. </span>  


10.数据框

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> x<-data.frame(a=1:4,b=c("a","b","c","d"))  
  2. > x  
  3.   a b  
  4. 1 1 a  
  5. 2 2 b  
  6. 3 3 c  
  7. 4 4 d  
  8. > nrow(x)  
  9. [1] 4  
  10. > ncol(x)  
  11. [1] 2  
  12. </span>  


11.命名

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

[plain]  view plain copy
  1. <span style="font-size:18px;">> x<-c(1,2,3,4)           ##给向量命名  
  2. > names(x)<-c("one","two","three","four")  
  3. > x  
  4.   one   two three  four   
  5. 1     2     3     4  
  6. > names(x)  
  7. [1] "one"   "two"   "three" "four"  
  8. > y<-list(one=1,two=2,three=3)   ##给列表命名  
  9. > y  
  10. $one  
  11. [1] 1  
  12.   
  13. $two  
  14. [1] 2  
  15.   
  16. $three  
  17. [1] 3  
  18. > m<-matrix(1:4,nrow=2,ncol=2)  
  19. > m  
  20.      [,1] [,2]  
  21. [1,]    1    3  
  22. [2,]    2    4  
  23. > dimnames(m)<-list(c("one","two"),c("three","four"))  
  24. > m  
  25.     three four  
  26. one     1    3  
  27. two     2    4  
  28. </span>  

版权声明:本文为博主原创文章,未经博主允许不得转载

清华大学出品的R语言全套课程PPT学习课件,非常适合大学生和职场人士学习,也适合老鸟复习回顾,完全可用于自学入门,很经典好用的PPT课件哦~ (1)清华大学精品数据科学R语言全套课程PPT课件含习题(26页) 第1章 R语言绪论(1) (2)清华大学精品数据科学R语言全套课程PPT课件含习题(27页) 第2章 R语言入门 (3)清华大学精品数据科学R语言全套课程PPT课件含习题(53页) 第3章 数据模型 (4)清华大学精品数据科学R语言全套课程PPT课件含习题(15页) 第4章 数据准备 (5)清华大学精品数据科学R语言全套课程PPT课件含习题(66页) 第5章 数据可视化 (6)清华大学精品数据科学R语言全套课程PPT课件含习题(35页) 第6章 数据探索 (7)清华大学精品数据科学R语言全套课程PPT课件含习题(38页) 第7章 数据变换 (8)清华大学精品数据科学R语言全套课程PPT课件含习题(20页) 第8章 高级编程 (9)清华大学精品数据科学R语言全套课程PPT课件含习题(63页) 第9章 数据建模 (10)清华大学精品数据科学R语言全套课程PPT课件含习题(25页) 第10章 数据评估 (11)清华大学精品数据科学R语言全套课程PPT课件含习题(21页) 第11章 影响大学平均录取分数线因素分析 (12)清华大学精品数据科学R语言全套课程PPT课件含习题(18页) 第12章 收视率分析 (13)清华大学精品数据科学R语言全套课程PPT课件含习题(18页) 第13章 RHadoop (14)清华大学精品数据科学R语言全套课程PPT课件含习题(25页) 第14章 Rspark
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值