一维数组,可以用于储存数值型,字符型和逻辑型的数组,使用函数c()创建。注意同一向量中的数据必须是同一类型的。
在创建向量后,可以通过访问方括号中的位置来访问特点的元素。
例如:
> a<-c("a","b","c","d","e")
> a[3]
[1] "c"
> a[2:5]
[1] "b" "c" "d" "e"
二维数组,每个元素都拥有相同的模式。可以使用matrix()函数创建
mymatrix <- matrix(vector, nrow=row_number,
ncol=col_number,byrow=Logical_value,
dimnames=list(char_vector_rownames,char_vector_colnames))
默认情况下byrow=FALSE,按列填充
矩阵中下标的使用:
> x <- matrix(1:10,nrow=2,byrow = FALSE)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> x[2,]
[1] 2 4 6 8 10
> x[,4]
[1] 7 8
> x[2,c(3,4)]
[1] 6 8
数组(array)的形式与矩阵相似,但是维度≥2。数组通过函数array()创建。
myarray <- array(vector, dimensions, dimnames)
dimensions是一个数值型向量,给出了各维度最大的下标值
举例:
> 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
同样地,使用方括号可以访问位置
> z[2,2,4]
[1] 22
数据框与矩阵和数组的不同之处在于,不同的元素可以包含不同模式的数据。使用函数data.frame()创建。
mydata <- data.frame(col1,col2, col3,....)
col表示列向量,可以为任何模式的数据
> patientID <- c(1,2,3,4)
> age <- c(25,34,28,52)
> diabetes <- c("Type1","Type2","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 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
同样地,方括号可以选取数据框中的元素
> patientdata[1:3]
patientID age diabetes
1 1 25 Type1
2 2 34 Type2
3 3 28 Type1
4 4 52 Type1
$可以表示数据框中的某个变量
> table(patientdata$diabetes,patientdata$status)
Excellent Improved Poor
Type1 1 0 2
Type2 0 1 0
此处引用变量使用$需要每次都键入数据框,有更精简的方法:
attach可以将数据框添加到R的搜索路径中,在添加以后,R遇到变量名会搜索已经添加的路径中的数据框。在使用attach()函数以后使用detach()将数据框从路径中移除。
> attach(patientdata)
The following objects are masked _by_ .GlobalEnv:
age, diabetes, patientID, status
> patientage.m <- mean(age)
> patientage.m
[1] 34.75
> detach(patientdata)
但是如上所示,使用attach()函数的时候经常会遇到提示 The following objects are masked fromhttps://bbs.pinggu.org/thread-5959579-1-1.html
原因:
attach()函数慎用,数据已数据框形式存储才是正确的姿势,如果mtcars释放到内从中,那么,如果内存中本身有个变量名和mtcars数据框中的变量名一样的话,后生的会覆盖先生的。 |
当相同名称的对象不止一个时,attach函数就有局限性了。with()函数则可以避免这一情况
> with(patientdata,summary(status))
Length Class Mode
4 character character
若有多条语句,在data_frame, 后加{},花括号中的内容则都是针对data_frame的
> with(mtcars,{
+ print(summary(mpg))
+ plot(mpg,disp)
+ plot(mpg,wt)
+ })
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
如果需要创建在with之外的对象,则需要用特殊赋值符号<<-替代标准赋值符号<-
例:
> with(mtcars,{
+ mpg.note<-summary(mpg)
+ })
Error: unexpected input in:
"mpg.note<-summary(mpg)
})"
> with(mtcars,{
+ mpg.status <<- summary(mpg)
+ })
> mpg.status
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
<<-会将创建的对象保存在with()之外的全局环境中
实例标识符
在数据框中的patientID这个对象是用于辨识不同个体的,可以使用实例标识符(case identifier)对此类对象进行标识,变成在输出中实例名称所用的变量。用row.names选项进行标识。
> patientdata <- data.frame(patientID,age,diabetes,status,row.names = patientID)
变量可归结为名义型,有序型,连续型,其中名义型和有序型在R中称为因子(factor)。函数factor()以整数向量的形式储存类别值。整数取值范围为[1,...,k],其中k为名义型变量中的唯一值的个数。
例如:
> diabetes
[1] Type1 Type2 Type1 Type1
Levels: Type1 Type2
将Type1和Type2分为两个水平,并且在内部储存时将diabes向量储存为(1,2,1,1)。赋值顺序根据字母顺序确定。
如果要表示有序型变量,在factor()中使用选项ordered=TRUE 。
如果想覆盖按照字母顺序给定的水平,则在factor()中指定选项levels=c(),水平与变量出现顺序保持一致。
在后续的实际使用中,会出现不知何时应该将名义型和有序型变量转化为因子的情况,现总结如下:
使用分类数据的意义是什么?
列表是一些对象或者成分的有序集合。可使用函数list()创建列表。
mylist <- list(object1,object2,..)
在object前加上选项name=可以为对象命名
在list中可以使用双重方括号来访问特定部分,方括号中可以是该部分的数字或者名称。
mylist[[2]]
mylist[["age"]]
导入ASCⅡ文件
使用read.table()函数导入
mydataframe <- read.table(file,options)
file是ASCⅡ文本文件,options包含各种常用的选项,见书P33。
其中stringsAsFactors=Logical_value比较重要,其默认值为TRUE,即会将对象中的字符型向量转化为因子,在处理大型文本时设置为FALSE会提高处理速度。
导入Excel文件
使用xlsx包中的函数read.xlsx(file, n)导入。file为Excel的所在路径,n为sheet号。
导入SPSS文件
使用Hmisc包中的spss.get()函数来获取。
mydataframe <- spss.get("mydata.scv",use.value.labels=TRUE)
use.value.labels=TRUE是将mydata.scv中的值标签的变量转化为因子。
导入SAS文件
使用Hmisc包中的sas.get()函数来获取。
mydata <- sas.get(libraryName=datadir,member="clients",sasprog=sasexe)
libraryName是包含了SAS数据集的文件夹,member是数据集的名字,sasprog是sas程序所在的路径
函数factor()可以为类别型变量创建值标签。
factor(object, levels=c(), labels=c())
其中levels中的是变量的实际值,labels中的是目标值标签的字符向量。
书中P41
最后,如果想删除所有当前工作环境的对象,使用:
rm(list=ls())