前言:
微博参与话题 #给你四年时间你也学不会生信#
R存储数据的结构:
标量、向量、数组、数据库、列表
[图片上传失败...(image-d5b409-1537089118428)]
R处理数据类型(模式):
数值型、字符型、逻辑型(TRUE/FALSE)、复数型(虚数)、和原生型(字节)
将类别型(包括名义型和有序型)变量称为因子(factors)
1. 向量
> a <- c(1, 2, 5, 3, 6, -2, 4) #数值型向量
> b <- c("one", "two", "three") #字符型向量
> c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE) #逻辑型向量
#单个向量中的数据必须拥有相同的类型或模式
2. 矩阵
矩阵是一个二维数组。只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix创建矩阵。
其中vector包含了矩阵的元素,nrow和ncol来指定行列的维度,选项byrow则表明矩阵应当按行填充(byrow=True)还是按列填充(byrow=False),默认情况下按列填充。dimnames=list()包含了可选的、以字符型向量表示的行名和列名。
> 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)) # 默认按列填充,即byrow=FALSE
> mymatrix
C1 C2
R1 1 26
R2 24 68
3. 数组
数组array与矩阵类似,但是维度可以大于2。
Usage
array(data = NA, dim = length(data), dimnames = NULL)
as.array(x, ...)
is.array(x)
data包含数组中的数据,dimensions是一个数值型向量,给出了各个维度下表的最大值,dimnames是可选的,各维度名称标签的列表。
> # Listing 2.3 - Creating an array
> 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
4. 数据框
不同的列可以包含不同模式(数值型、字符型)的数据,R中最常处理的数据结构。每一列数据的模式必须唯一,可以将多模式的不同列放到一起组成数据框。
# Listing 2.4 - Creating a dataframe
> 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:2] #第1、2列
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
attach()、detach()、with()
> attach(mtcars)
> summary(mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.4 15.4 19.2 20.1 22.8 33.9
> plot(mpg,disp)
> plot(mpg, wt)
> detach
#with()以内的对象
> with(mtcars,{ print(summary(mpg))plot(mpg,disp) plot(mpg, wt) })
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.4 15.4 19.2 20.1 22.8 33.9
#with()以外的对象
> with(mtcars,{ nikeepstats <- summary(mpg) keepstats <<- summary(mpg) })
> nikeepstats
Error: object 'nikeepstats' not found
> keepstats
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.4 15.4 19.2 20.1 22.8 33.9
实例标识符
在R中,可通过数据框操作函数中的rowname选项将对象指定为R中标记各类打印输出和图形中实例名称所用的变量。如:
patientdata <- data.frame(patientID,age,diabetes,status,row.names=patientID)
5. 因子
变量可以归结为名义型(疾病类型)、有序型(患病登记)或连续型变量(年龄)。
类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。
函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1……k],同时一个由字符串(原始值)组成的内部向量映射到这些整数上。
> 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, order=TRUE)
> patientdata <- data.frame(patientID, age, diabetes, status)
> str(patientdata)
'data.frame': 4 obs. of 4 variables:
$ patientID: num 1 2 3 4
$ age : num 25 34 28 52
$ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1
$ status : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3
> summary(patientdata)
patientID age diabetes status
Min. :1.00 Min. :25.0 Type1:3 Excellent:1
1st Qu.:1.75 1st Qu.:27.2 Type2:1 Improved :1
Median :2.50 Median :31.0 Poor :2
Mean :2.50 Mean :34.8
3rd Qu.:3.25 3rd Qu.:38.5
Max. :4.00 Max. :52.0
函数factor()可为类别型变量创建值标签。
patientdata$gender <- factor(patientdata$gender, levels = c(1,2) labels =c("male","female"))
6. 列表
列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可 以是任意对象,不同元素不必是同一类型。元素本身允许是其它复杂数据类型,比如,列表 的一个元素也允许是列表。
> 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"
数据对象处理函数:
length(object) #显示对象中元素/成分个数,length("")=1
dim(object) #显示某个对象维度,行数与列数
names(object) #显示对象中各元素/成分名称
rm(object1,object2,...) #删除一个或者多个对象
nchar(x) #计算字符串x的长度,对于非字符对象不能用该函数,nchar("")=0
tian<-c("asd","ngvie","jfvmsdivk"),nchar(tian)的结果为3 5 9
substr(x,from,stop) #提取或者替换字符向量中的子串,substr(x,2,4)<-tuy
substring(x,first,last=100000L) #对字符串x从first到last截取子字符串
toupper(x) #大写转换
tolower(x) #小写转换
rbind():#将两个矩阵或数据框按照行来拼接
cbind():#将两个函数或矩阵按照列来拼接
merge():#用于横向合并两个数据框,通过共有变量连接,若某个数据框中的一条记录在该变量的取值在另一个数据框中不存在,该记录就无法找到连接的对象,因此会被删掉。
参考资料1:R数据结构之矩阵
参考资料2:R语言实战
网友评论