R语言学习笔记(2)

浏览: 997

第二章:创建数据集

一 R中的数据

二 数据的输入

 

 

一R中的数据

数据集:通常是由数据构成的一个矩形数组,行表示观测,列表示变量

R可以处理的数据类型:数值型、字符型、逻辑型、复数型(虚数)、原生型(字节)

R将类别型(包括名义型和有序型)变量称为因子

数据结构

R有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表

在R中,对象是指可以赋值给变量的任何事物

向量

向量是用于存储数值型、字符型、或逻辑型数据的一堆数组。用函数c()可以创建向量。单个向量的数据必须拥有相同的类型(数值型,字符型或逻辑型)

> a<-c(1,2,3,4,5,6,7)
> a
[1] 1 2 3 4 5 6 7
> b<-c("one","two","three")
> b
[1] "one" "two" "three"
> c<-c(TRUE,FALSE,TRUE,TRUE,FALSE)
通过方括号访问向量中的元素
> a<-c(6,5,4,3,2,1)
> a[3]
[1] 4
> a[c(1,3,5)]
[1] 6 4 2
> a[2:6]
[1] 5 4 3 2 1

矩阵(是一个二维数组,只是每个元素都是相同的模式)

一般格式

mymatrix<-matrix(vector,nrow=number_of_rows, ncol=number_of_columns,

byrow=logical_value, dimnames=list(char_vector_names,char_vector_colnames))

vector包含了矩阵的元素,nrow和ncol用于指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。

byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况是按列填充

代码2-1
> y<-matrix(1:20,nrow=5,ncol=4)
> y
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> cells<-c(1,26,24,68)
> rnames<-c("R1","R2")
> cnames<-c("C1","C2")
> mymatrix<-matrix(cells,nrow=2,ncol=2,byrow=TRUE,
dimnames=list(rnames,cnames))
> mymatrix
C1 C2
R1 1 26
R2 24 68
> mymatrix<-matrix(cells,nrow = 2,ncol = 2,byrow = FALSE,
+ dimnames = list(rnames,cnames))
> mymatrix
C1 C2
R1 1 24
R2 26 68
访问矩阵中的元素
代码2-2
> x<-matrix(1:10,nrow=2)
> x[2,]
[1] 2 4 6 8 10
> x[1,4]
[1] 7
> x[1,c(4,5)]
[1] 7 9

数组

数组与矩阵类似,但维度可以大于2。通过array()函数实现,形式如下:

myarray<-array(vector,dimensions,dimnames)

其中vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,dimnames是可选的、各维度名称标签的列表。

 代码2-3
> dim2<-c("B1","B2","B3")
> dim1<-c("A1","A2")
> dim2<-c("B1","B2","B3")
> dim3<-c("C1","C2","C3","C4")
z<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
> z
, , C1

B1 B2 B3
A1 1 3 5
A2 2 4 6

, , C2

B1 B2 B3
A1 7 9 11
A2 8 10 12

, , C3

B1 B2 B3
A1 13 15 17
A2 14 16 18

, , C4

B1 B2 B3
A1 19 21 23
A2 20 22 24

数据框

数据框通过data.frame()创建

mydata<-data.frame(col1,col2,col,……)

其中列向量col1,col2,....可以为任何类型(如字符型,数值型或逻辑型)。每一列的名称可由函数names指定。

代码2-4
> patientID<-c(1,2,3,4)
age<-c(25,34,28,52)
> diabetes<-c("Type1","Type","Type1","Type1")
> status<-c("Poor","Improved","Excellent","Poor")
> patientdata<-data.frame(patientID,age,diabetes,status)
> patientdata
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
选取数据框中的元素
代码2-5
> patientdata[1:2]
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
> patientdata[c("diabetes","status")]
diabetes status
1 Type1 Poor
2 Type Improved
3 Type1 Excellent
4 Type1 Poor
> patientdata$age # $符号用来选取一个给定数据框中的某个特定变量
 [1] 25 34 28 52
> table(patientdata$diabetes,patientdata$status)

Excellent Improved Poor
Type 0 1 0
Type1 1 0 2

attach()可以将数据框添加到R的搜索路径中

detach()将数据从搜索路径中移除

with()

列表

列表可用函数list()创建列表

mylist<-list(object1,object2,....)

or

mylist<-list(name1=object1,name2=object2,...)

代码2-7
> g<-"my first list"
> h<-c(25,26,18,39)
> j<-matrix(1:10,nrow = 5)
> k<-c("one","two","three")
> mylist<-list(title=g,ages=h,j,k)
> mylist
$title
[1] "my first list"
$ages
[1] 25 26 18 39

[[3]]
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
4,] 4 9
[5,] 5 10

[[4]]
[1] "one" "two" "three"
> mylist[[2]]
[1] 25 26 18 39
> mylist[["ages"]]
[1] 25 26 18 39

二 数据的输入(键盘,文本文件,统计软件,数据库等)

数据的更改:edit()函数   

                 fix()函数

从带分隔符的文本文件导入数据:read.table()

mydata<-read.table(file,header=logical_value,

                             sep="delimiter",row.names="name")

其中file是一个带分隔符的ASCII文本文件,header是一个表明首行是否包含了变量的名称的逻辑值,sep用来指定分割数据的分割符,row.names是一个可选参数,用以指定一个或多个表示行标识符的变量

导入excel数据:先在excel中将其导出为逗号分隔文件(csv),然后导入到R中

                     下载安装xlsx包,然后read。xlsx(file,n)n为要导入的工作表序号

mydataframe<-read.xlsx(workbook,1) 

从网页抓取数据:使用readlines()函数下载网页,然后用如grep()和gsub()一类函数处理

导入spass数据:通过foreign包中的函数read.spss()导入R中,

                       也可以使用Hmisc包中的spss.get()函数

mydataframe()<-spss.get("mydata.sav",use.valuel.labels=TRUE) use.value.labels=TRUE表示函数将带有值标签的变量导入为R中水平的相应因子。

推荐 0
本文由 邬家栋 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册