chapter2-R的数据结构

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搜索路径,便于直接引用数据框中的变量
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
 
posted @   何以解忧~  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示