首页 > 代码库 > R 统计与作图---入门(一)数据类型
R 统计与作图---入门(一)数据类型
R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心团队”负责开发。R是基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。R的语法是来自Scheme。
R的源代码可自由下载使用,亦有已编译的可执行文件版本可以下载,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux)、Windows和MacOS。R主要是以命令行操作,同时有人开发了几种图形用户界面。---维基百科
我是走出校园之后才知道到有一门语言和开发环境叫R,在此之前我的编程认知范围仅限于于C/C++(VC++)和Matlab。它帮我完成了职场的第一件工作,画一个聚类热力图。此文介绍一下我学习使用R的经历和心得。
为什么是R? 因为它开源免费跨平台,对没钱的个人和不想付钱的公司是个好东西,对需要多样性工具的人是个好消息,对不用windows的程序员更是个好消息。但是由于它每次将所有数据读入内存,因此面对大数据显得力不从心。
1. 软件环境官方首页:http://www.r-project.org/
安装方法不做描述, 官网上优详尽的描述和介绍
2. 基本知识
2.1 数据类型:
普通变量: 包括数字、字符等
> num=1> num[1] 1> num=2.5> num[1] 2.5> str="R"> str[1] "R"> str="R language"> str[1] "R language"
矢量:基本和编程语言种的数组相同, 可以手动定义,可以函数生成,也可已由其他数据转换。
(1) 手动定义使用函数 c()
> vec=c(1,2,3)> vec[1] 1 2 3> vec=c(1.2,3.5,4.1)> vec[1] 1.2 3.5 4.1> vec=c("a","b","c")> vec[1] "a" "b" "c"#整型和浮点型数据,整型将自动转化成浮点型数据> vec=c(1,2.0,3.7) > vec[1] 1.0 2.0 3.7#数字和字符串,数字将自动转换成字符串> vec=c("a",6,7.9,"str") > vec[1] "a" "6" "7.9" "str"# 访问矢量元素,下标从[1]开始,[0]中存储矢量的数据类型> vec[0]character(0)> vec[1][1] "a"# 普通变量可以看作是特殊的矢量,[0]> num=2.5> num[0]numeric(0)> num[1][1] 2.5> str="R language"> str[0]character(0)> str[1][1] "R language"
(2) 函数创建,常见好用的向量创建函数优seq,rep等
# seq(x,y,by=z) 创建以z为步长从x到y的向量,by缺省时z=1> seq(3,8,by=2)[1] 3 5 7> seq(3,8)[1] 3 4 5 6 7 #rep(x,y), 创建一个向量,将x重复y次> rep(1,5)[1] 1 1 1 1 1# x本身也可以是矢量> rep(c(1,3),5) [1] 1 3 1 3 1 3 1 3 1 3# x:y, 创建重x到y步长为1的向量,同 seq(x,y)> 1:5> 1:5[1] 1 2 3 4 5# ?fun, 问号连接函数,查看函数用法> ?rep
矩阵:矩阵类似二维数组,它的一行或者一列即是一个向量
# 使用matrix()生成一个3x4的矩阵,所有元素值为5, 具体用法参照?matrix> mat=matrix(5,3,4)> mat [,1] [,2] [,3] [,4][1,] 5 5 5 5[2,] 5 5 5 5[3,] 5 5 5 5# 访问元素使用[x,y], 当x或y缺省时访问正行或整列,每行或没列均是一个向量> mat[2,3]=2> mat[2,3]=3> mat [,1] [,2] [,3] [,4][1,] 5 5 5 5[2,] 5 2 3 5[3,] 5 5 5 5#访问第2行> mat[2,][1] 5 2 3 5# 访问第3列> mat[,3][1] 5 3 5# 矩阵可由多个向量合并而来,使用rbind(行合并)或cbind(列合并)> rbind(1:5,1:5,1:5) [,1] [,2] [,3] [,4] [,5][1,] 1 2 3 4 5[2,] 1 2 3 4 5[3,] 1 2 3 4 5> cbind(1:5,1:5,1:5) [,1] [,2] [,3][1,] 1 1 1[2,] 2 2 2[3,] 3 3 3[4,] 4 4 4
数据框(data.frame):也是一种存储表table的数据格式,它可以优自己的表头和属性名称,每一列是一个向量,但每一行不是。不同列之间的数据属性互不干扰。
> name=c("Tom","Jerry","Lilei")> score=c(90,70,80)> excellent=c(TRUE,FALSE,TRUE)> exam=data.frame(name,score,excellent)> exam name score excellent1 Tom 90 TRUE2 Jerry 70 FALSE3 Lilei 80 TRUE# 访问方式同矩阵,由[], 每行仍为一个子数据框,没列则仍为一个向量> tmp=exam[1,]> tmp name score excellent1 Tom 90 TRUE> tmp=exam[,1]> tmp[1] Tom Jerry LileiLevels: Jerry Lilei Tom# 可通过原有向量名访问指定列,使用 $ 符号> exam$name #于exam[,1] 相同[1] Tom Jerry LileiLevels: Jerry Lilei Tom# 可自定义数据框的行名或列名,使用rownames或colnames> rownames(exam)=exam$name> exam name score excellentTom Tom 90 TRUEJerry Jerry 70 FALSELilei Lilei 80 TRUE# 数据框可由数据文件读入,注意:若输入文件中带有表头和属性名称,则左上角值应为缺省,即文件的第一行逼其他行少一个数据,
# 此时R将自动将第一行和第一列定义为colnames和rownames,否则将会被当作数据读入到数据框中> exam=read.csv("exam.csv") #以逗号> exam=read.table("exam.txt") #以tab
列表:一种更为自由的数据类型,可以存储多种数据类型,并自定义名称
> List=list(Var="R language", Vec=vec, Mat=mat, DF=exam) > List$Var[1] "R language"$Vec[1] "a" "6" "7.9" "str"$Mat [,1] [,2] [,3] [,4][1,] 5 5 5 5[2,] 5 2 3 5[3,] 5 5 5 5$DF name score excellentTom Tom 90 TRUEJerry Jerry 70 FALSELilei Lilei 80 TRUE > List$Var[1] "R language"> List$Vec[1] "a" "6" "7.9" "str"> List$Mat [,1] [,2] [,3] [,4][1,] 5 5 5 5[2,] 5 2 3 5[3,] 5 5 5 5> List$DF name score excellentTom Tom 90 TRUEJerry Jerry 70 FALSELilei Lilei 80 TRUE
未完待续……
R 统计与作图---入门(一)数据类型