文章目录
R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同。下图是一张R语言数据结构图。
向量
定义:
- 用于存储数值型、字符型或逻辑型数据的一维数组。向量中的元素类型必须全为数值型或者字符型或者逻辑型。向量中的单个元素称为标量,属于特殊的向量。
向量是R语言中最基础,也是最重要的数据类型。
向量类型
- 数值型向量:向量中的元素全为数字
- 字符型向量:向量中的元素既可以全为字符,也可以包含数字,但是这里的数字是字符串,并不是数值。
- 逻辑型向量:向量中的元素只有两种
TURE
或者FALSE
向量的创建
数值型向量的创建
c(1,2,3,4,5,6)
1:6
rep(1,3) # 重复1三次
rep(1:3,3) # 重复(1,2,3)三次
rep(1:3,each = 3) # 重复1,2,3各三次
c(rep(1:3,3),rep(1:3,each = 3)) # 合并向量
字符型向量的创建
b = c("one", "two", "three")
b
## [1] "one" "two" "three"
逻辑型向量的创建
c = c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
c
## [1] TRUE TRUE TRUE FALSE TRUE FALSE
向量中元素的访问
a = c("k", "j", "h", "a", "c", "m")
a[2] #向量a中第二个元素
## [1] "j"
a[c(1,2,3)] #向量a中前3个元素
## [1] "k" "j" "h"
a[1:3] #向量a中前3个元素
## [1] "k" "j" "h"
矩阵
定义:
- 矩阵是二维数组,矩阵中的元素都拥有相同的类型。大多数情况下,我们使用的矩阵就是数值型矩阵,矩阵中的元素全为数值,矩阵也可以理解为折叠起来的数值型向量。
矩阵的创建
rnames = c('r1','r2','r3','r4','r5','r6')
cnames = c('c1','c2','c3','c4','c5')
myymatrix <- matrix(1:30,
nrow=6,
ncol=5,
byrow=F, # 默认按列填充
dimnames=list(rnames, cnames)) # 行名和列名
myymatrix
## c1 c2 c3 c4 c5
## r1 1 7 13 19 25
## r2 2 8 14 20 26
## r3 3 9 15 21 27
## r4 4 10 16 22 28
## r5 5 11 17 23 29
## r6 6 12 18 24 30
矩阵下标的使用
提取矩阵中第2行
a1 = myymatrix[2,]
a1
## c1 c2 c3 c4 c5
## 2 8 14 20 26
提取矩阵中的1,3,5行
a2 = myymatrix[c(1,3,5),]
a2
## c1 c2 c3 c4 c5
## r1 1 7 13 19 25
## r3 3 9 15 21 27
## r5 5 11 17 23 29
提取矩阵中第2列
b1 = myymatrix[,2]
b1
## r1 r2 r3 r4 r5 r6
## 7 8 9 10 11 12
提取矩阵中的2,4,5列
b2 = myymatrix[,c(2,4,5)]
b2
## c2 c4 c5
## r1 7 19 25
## r2 8 20 26
## r3 9 21 27
## r4 10 22 28
## r5 11 23 29
## r6 12 24 30
提取任意子矩阵
data = myymatrix[1:4,2:4]
data
## c2 c3 c4
## r1 7 13 19
## r2 8 14 20
## r3 9 15 21
## r4 10 16 22
数组
定义:
- 数组和矩阵基本上属于一种数据类型,矩阵是特殊的数组,而数组一般指三维及以上。数组在R语言中用的很少,所以这里只写出数组的创建方法。
数组的创建
dim1 = c('A1','A2')
dim2 = c('B1','B2','B3')
dim3 = c('C1','C2','C3','C4')
data = array(1:24,
dim = c(2,3,4),
dimnames = list(dim1,dim2,dim3)) #相当于创建4个2行3列的矩阵
data
## , , 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
数据框
定义:
- 数据框和矩阵结构相似,由行列组成,数据框中每一列为一个成分,数据框中的成分类型分为两种:一种是向量,另外一种是因子。
数据框是R中最常见的数据结构之一,一般数据处理都是基于数据框。
数据框的创建
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[,c('age','diabetes')] ## age diabetes ## 1 25 Type1 ## 2 34 Type2 ## 3 28 Type1 ## 4 52 Type1
方法三:
-
使用
attach()
函数和deteach()
函数attach(mtcars) plot(mpg, disp) detach(mtcars)
-
使用
with()
函数,with()
函数使用有一个缺点,with()
函数里面赋值给对象需要用<<-
,不能用<-
或者=
,只有这样才可以将对象保存到全局环境中。with(mtcars, { plot(mpg, disp) })
因子
在我们处理的数据中,通常将数据框中的列(成分)也称为变量
或者属性,而行称为观测或者示例,在R中把数据框的列叫做变量更普遍。变量是统计学中的名词,在数据框中变量既可以是向量,也可以是因子
。变量通常有三种类型,名义型(类别型)、有序型和连续型变量。
变量类型:
-
名义型变量:性别有男女之分,体型有胖瘦之别,这些都是名义型(类别型)变量
-
有序型变量:癌症的分期有早期、中期和晚期,变量中的值有顺序之分,称为有序变量
-
连续型变量:人的体重就是连续型变量,表现为一定范围内的任意值,与数值型向量等价。
名义型变量和有序性变量在R中统称为因子
因子的创建
factor()
函数创建名义型因子
sex = c("male", "female", "male", "female")
sex = factor(sex)
sex;class(sex)
## [1] male female male female
## Levels: female male
## [1] "ordered" "factor"
factor()
函数创建有序型因子
status = c("early", "middle", "late", "late")
status = factor(status,
order=TRUE,
levels=c("early", "middle", "late"))
status;class(status)
## [1] early middle late late
## Levels: early < middle < late
## [1] "ordered" "factor"
有时候需要将因子名称用数字表示,这时候就需要对因子重命名
type = c("Type1","Type1","Type2","Type1","Type2")
type = factor(type,levels = c("Type1","Type2"),labels = c(1,2))
列表
定义:
- 列表是R语言中高级数据类型,列表是一些
对象
的有序集合,对象为任何一种数据类型。列表中的对象可以是向量、矩阵、数组、数据框和因子,甚至列表中也可以包含列表。
列表的创建
一般使用list()
函数来创建列表
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$age
和mylist[[2]]
都表示提取向量h
mylist$age;mylist$age == mylist[[2]]
## [1] 25 26 18 39
## [1] TRUE TRUE TRUE TRUE
处理对象的通用函数
函数 | 作用 |
---|---|
length(object) | 显示对象中元素/成分的数量 |
str(object) | 显示某个对象的结构 |
class(object) | 显示某个对象的类型 |
head(object) | 列出某个对象的开始部分 |
tail(object) | 列出某个对象的最后部分 |
ls() | 显示当前的对象列表 |
rm(object, object, ...) | 删除一个或更多个对象。语句rm(list = ls()) 将删除当前工作环境中的几乎所有对象 |
数据转换
判断 | 转换 |
---|---|
is.numeric() | as.numeric() |
is.character() | as.character() |
is.vector() | as.vector() |
is.matrix() | as.matrix() |
is.data.frame() | as.data.frame() |
is.factor() | as.factor() |
is.logical() | as.logical() |
特殊数据
格式 | 含义 | 查看 |
---|---|---|
NA | 缺失值 | is.na() |
NaN | 非数字,如0/0 | is.nan() |
Inf | 无穷数,如1/0 | is.infinite() |
NULL | 空数据 | is.null() |
参考资料
R语言实战(二)
本博客内容将同步更新到个人微信公众号:生信玩家。欢迎大家关注~~~