chapter2-R的数据结构
R语言的数据结构分为5种类型:标量,向量,矩阵,列表,数据框
向量-c()
-
c() 构建成的仅包含数值型、字符型、逻辑型数据的一维数组
a <- c(1,2,3,4,5) ###数值型的向量
b <- c('one','two','three') ###字符型数据
c <- c(T,F) ##逻辑型数据 -
向量中元素的访问--x[位置,或者向量]访问特定位置的元素
a <- c('k','j','h','a','c','m')
-
普通的取值
a[3]
[1] "h" -
间隔取值
a[c(1,5,7)]
[1] "k" "c" NA -
连续取值
a[c(seq(1,7,2))] ###seq(from,to,by)
[1] "k" "h" "c" NA
-
矩阵-matrix()
-
矩阵 matrix()创建的仅包含一种数据类型的二维数组
y <- matrix(data = c(1:20),nrow = 5,ncol = 4) #创建一个普通的矩阵(5行4列)
#按行填充创建矩阵(包含行名和列名)-byrow
cells <- c(1,26,24,28)
rnames <- c('R1','R2')
cnames <- c('C1','C2')
mymatrix <- matrix(cells,nrow = 2,ncol = 2,dimnames = list(rnames,cnames),
byrow = T)
> mymatrix
C1 C2
R1 1 26
R2 24 28
#按列进行填充将构建某一个矩阵-byrow
mymatrix <- matrix(cells,nrow = 2,ncol = 2,dimnames = list(rnames,cnames),
byrow = F)
> mymatrix
C1 C2
R1 1 24
R2 26 28 -
矩阵中元素的引用
#建立三行三列的矩阵
cells <- c(1,26,24,28,34,23,43,35,44)
rnames <- c('R1','R2','R3')
cnames <- c('C1','C2','C3')
z <- matrix(cells,nrow = 3,ncol = 3,dimnames = list(rnames,cnames),
byrow = T)
#引用某一行
z[1,]
> z[1,]
C1 C2 C3
1 26 24
#引用某一列
z[,2]
> z[,2]
R1 R2 R3
26 34 35
#按照行名和列名引用
z['R1',]
> z['R1',]
C1 C2 C3
1 26 24
z[c('R1','R3'),]#按照行名和列名引用多行
> z[c('R1','R3'),]#按照行名和列名引用多行
C1 C2 C3
R1 1 26 24
R3 43 35 44
z[c('R1','R3'),'C3']
> z[c('R1','R3'),'C3']
R1 R3
24 44
数组-array()
-
数组与矩阵类似,但是可以创建更高维度(dimensions>2)的数据
### 创建三维数组
mydata <- c(1:24)
# 为各个维度命名
dim1 <- c('A1','A2')
dim2 <- c('B1','B2','B3')
dim3 <- c('C1','C2','C3','C4')
# 构建数组
z <- array(mydata,dim = 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[1,,]
z[,2,]
z[,,4]
> z[1,,]
C1 C2 C3 C4
B1 1 7 13 19
B2 3 9 15 21
B3 5 11 17 23
> z[,2,]
C1 C2 C3 C4
A1 3 9 15 21
A2 4 10 16 22
> z[,,4]
B1 B2 B3
A1 19 21 23
A2 20 22 24
# 矩阵中取值方法在此同样适用
z[,,'C1']
z[,,c('C1','C3','C4')]
> z[,,'C1']
B1 B2 B3
A1 1 3 5
A2 2 4 6
> z[,,c('C1','C3','C4')]
, , C1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , C3
B1 B2 B3
A1 13 15 17
A2 14 16 18
, , C4
B1 B2 B3
A1 19 21 23
A2 20 22 24
数据框
-
数据框dataframe()的不同列包含有不同类型的数据
#数据框的建立
patient_ID <- c(1,2,3,4)
age <- c(25,34,28,52)
diabetes <- c('Type1','Type2','Type3','Type4')
status <- c('Poor','Improved','Excellent','Poor')
mydata <- data.frame(patient_ID,age,diabetes,status)
patient_ID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type3 Excellent
4 4 52 Type4 Poor
-
数据框的引用
## 按照行列进行引用
mydata[,1:3]
mydata[1:2,]
> mydata[,1:3]
patient_ID age diabetes
1 1 25 Type1
2 2 34 Type2
3 3 28 Type3
4 4 52 Type4
> mydata[1:2,]
patient_ID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
## 按照行名和列名进行引用
mydata[,c('patient_ID','age','status')]
nydata[c('1','4'),]、
> mydata[,c('patient_ID','age','status')]
patient_ID age status
1 1 25 Poor
2 2 34 Improved
3 3 28 Excellent
4 4 52 Poor
> mydata[c("1","4"),]
patient_ID age diabetes status
1 1 25 Type1 Poor
4 4 52 Type4 Poor
## 按照$符合选取数据框中某一列
mydata$patient_ID
mydata$age
> mydata$patient_ID
[1] 1 2 3 4
> mydata$age
[1] 25 34 28 52
-
数据框行列名的修改
#查看数据框mydata的行名和列名
colnames(mydata) #列名
rownames(mydata) #行名
> colnames(mydata) #列名
[1] "patient_ID" "age" "diabetes" "status"
> rownames(mydata) #行名
[1] "1" "2" "3" "4"
#行名和列名的修改
colnames(mydata) <- c('C1','C2','C3','C4')
rownames(mydata) <- c('R1','R2','R3','R4')
mydata
> mydata
C1 C2 C3 C4
R1 1 25 Type1 Poor
R2 2 34 Type2 Improved
R3 3 28 Type3 Excellent
R4 4 52 Type4 Poor
#构建数据框是直接将某一列设置为行名--实例数据符
mydata <- data.frame(patient_ID,age,diabetes,status,row.names=1)
> mydata
age diabetes status
1 25 Type1 Poor
2 34 Type2 Improved
3 28 Type3 Excellent
4 52 Type4 Poor
-
attach()、detach()和with()在数据框中的应用
attach(mydata) ##attach命令可将数据框添加到R搜索路径,便于直接引用数据框中的变量标签:patient,mydata,age,chapter2,C3,C1,数据结构,ID From: https://www.cnblogs.com/LiCX-R/p/17399132.html
plot(mpg,disp)
plot(mpg,wt)
detach(mydata) ##将数据框mydata从R搜索路径中移除
###当引入R搜索路径中含有其余的同名的变量时,需要避免实验attach()和detach(),分析单一数据框有很好的效果
###with函数的应用
### with函数数据应用于{}中的代码
with(mtcars,{
print(summary(mpg))
plot(mpg,disp)
plot(mpg,wt)
})
### with函数赋值命令仅在{}中有用,如需在全局使用,需要<<-符号
with(mtcars,{
nokeep <- summary(mpg)
keep <<- summary(mpg)
})
> with(mtcars,{
+ nokeep <- summary(mpg)
+ keep <<- summary(mpg)
+ })
> nokeep
错误: 找不到对象'nokeep'
> keep
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90