学习R语言第一天
2.2.1向量
a <- c(1, 2, 5, 3, 6, -2, 4)
b <- c("one", "two", "three")
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
2.2.2矩阵
#创建矩阵
y<-matrix(1:20,nrow=5,ncol = 4)#创建一个5x4的矩阵
y
##创建一个2x2含标签的矩阵
cells<-c(1,24,26,68)
rnames<-c("R1","R2")
cnames<-c("C1","C2")
mymatrix<-matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames=list(rnames,cnames))#按行填充的2x2矩阵
mymatrix
mymatrix1<-matrix(cells,nrow = 2,ncol = 2,byrow = FALSE,dimnames=list(rnames,cnames))#按列填充的2x2矩阵
mymatrix1
#矩阵下标的使用
x<-matrix(1:10,nrow = 2)
x
x[2,]#选择第2行
x[,2]#选择第2列
x[1,2]#选择第一行第二列的元素
2.2.3数组
数组(array)与矩阵类似,但维度可以大于2。
#创建一个数组
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
2.2.4 数据框
数据框中不同的列可以包含不同模式的数据。
数据框可通过函数data.frame()创建:
mydata <- data.frame(col1, col2, col3,……)
其中的列向量col1、col2、col3等可为任何类型(如字符型、数值型或逻辑型)。每一列的名称可由函数names指定。
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
#选取数据框中的元素
patientdate[1:2]
#输出
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
#选取diabetes和status两列元素
patientdata[c("diabetes","status")]
#输出
diabetes status
1 Type1 Poor
2 Type2 Improved
3 Type1 Excellent
4 Type1 Poor
记号"$"被用来选取一个给定数据框中的某个特定变量。例如,如果你想生成糖尿病类型变量diabetes和病情变量status的列联表,使用以下代码即可:
table(patientdata$diabetes,patientdata$status)
#输出
Excellent Improved Poor
Type1 1 0 2
Type2 0 1 0
1.attach()、detach()和with()
函数attach()可将数据框添加到R的搜索路径中。R在遇到一个变量名以后,将检查搜索路径中的数据框。
以第一章中mtcars数据框为例:
summary(mtcars$mpg)
plot(mtcars$mpg, mtcars$disp)
plot(mtcars$mpg, mtcars$wt)
可以改成
attach(mtcars)
summary(mpg)
plot(mpg, disp)
plot(mpg, wt)
detach(mtcars)#函数detach()将数据框从搜索路径中移除。
当名称相同的对象不止一个时,这种方法的局限性就很明显了。
> mpg<-c(25,36,47)
> attach(mtcars)
The following object is masked _by_ .GlobalEnv:
mpg
The following objects are masked from mtcars (pos = 3):
am, carb, cyl, disp, drat, gear, hp, mpg, qsec, vs, wt
> plot(mpg,wt)
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ
> mpg
[1] 25 36 47
这里,在数据框mtcars被绑定(attach)之前,你们的环境中已经有了一个名为mpg的对象。在这种情况下,原始对象将取得优先权,这与你们想要的结果有所出入。由于mpg中有3个元素而disp中有32个元素,故plot语句出错。函数attach()和detach()最好在你分析一个单独的数据框,并且不太可能有多个同名对象时使用。任何情况下,都要当心那些告知某个对象已被屏蔽(masked)的警告。
除此之外,另一种方式是使用函数with()。可以这样重写上例:
with(mtcars, {
print(summary(mpg))
plot(mpg, disp)
plot(mpg, wt)
})
花括号{}之间的语句都针对数据框mtcars执行,这样就无需担心名称冲突了。如果仅有一条语句(例如summary(mpg)),那么花括号{}可以省略。
函数with()的局限性在于,赋值仅在此函数的括号内生效。
如果你需要创建在with()结构以外存在的对象,使用特殊赋值符<< - 替代标准赋值符(<-)即可,它可将对象保存到with()之外的全局环境中。这一点可通过以下代码阐明:
> with(mtcars, {
+ nokeepstats <- summary(mpg)
+ keepstats <<- summary(mpg)
+ })
> nokeepstats
Error: object 'nokeepstats' not found
> keepstats
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
**2.实例标识符
patientdata<-data.frame(patientID,age,diabetes,status,row.names = patientID)
2.2.5因子
变量可归结为名义型、有序型或连续型变量。
类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。
因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。
函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1……k](其中 k 是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上。
例如:
名义型变量
#创建一个向量
diabetes<-c("Type1","Type2","Type1","Type1")
#使用factor函数转变
diabetes<-factor(diabetes)
将此向量储存为(1,2,1,1),并且在内部将其关联为1=Type1,2=type2。
有序型变量
需要为函数factor()指定参数ordered=TRUE。针对向量diabetes进行的任何分析都会将其作为名义型变量对待,并自动选择适合这一测量尺度的统计方法。
status<-c("Poor","Improved","Excellent","Poor")
#使用factor函数转变
status<-factor(status,ordered=TRUE)
将此向量储存为(3,2,1,3)。另外,针对此向量进行的任何分析都会将其作为有序型变量对待,并自动选择合适的统计方法。
因子的水平默认依字母顺序创建。也可以通过指定levels选项来覆盖默认排序。
例如:
status<-factor(status,ordered=TRUE,levels=c("Poor","Improved","Excellent"))
各水平复制将为1=Poor,2=Improved,3=Excllent。
请保证指定的水平与数据中的真实值相匹配,因为任何在数据中出现而未在参数中列举的数据都将被设为缺失值。
数值型变量
数值型变量也可以通过levels和labels来编码成因子。
#男性被编码成1,女性被编码成2
sex<-factor(sex,levels=c(1,2),labels=c("Male","Female"))
因子的使用
patientID <-c(1,2,3,4)
age <- c(25,34,28,52)
diabetes<-c("Type1","Type2","Type1","Type1")
status<-c("Poor","Improved","Excellent","Poor")
diabetes <- factor(diabetes)
status<-factor(status,ordered=TRUE)
patientdata <-data.frame(patientID,age,diabetes,status)
str(patientdata)#显示对象的结构
summary(patientdata)#显示对象的统计概要
2.2.6 列表
列表是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分,component)的有序集合。可以使用函数list()创建列表。
mylist <- list(object1,object2,......)
其中对象可以是前面的任何结构。
还可以为列表中的对象命名:
mylist <- list(name1=object1,name2=object2,......)
#创建一个列表
g <- "My First List"
h <- c(25,42,26,39)
j <- matix(1:10,nrow=5)
k <- c("one","two","three")
mylist <- list(tltle=g,ages=h,j,k)#创建列表
mylist#输出整个列表
mylist[[2]]#输出第二个成分
mylist[["ages"]]#输出ages成分