首页 > 其他分享 >chapter2-R的数据结构

chapter2-R的数据结构

时间:2023-05-14 13:11:40浏览次数:35  
标签:patient mydata age chapter2 C3 C1 数据结构 ID

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
 

标签:patient,mydata,age,chapter2,C3,C1,数据结构,ID
From: https://www.cnblogs.com/LiCX-R/p/17399132.html

相关文章

  • 数据结构教程之树
    树大家都见过吧当然,我们今天说的不是这个树,而是这个这玩意和大自然中的树有啥关系呢很简单首先,做一个树的简笔画然后,在每条树枝的起点和终点画上圆圈,树枝交会的地方也要画其次,在圆圈间树枝的地方用直线连接随后,把原来的简笔画去掉,整理一下圆圈,凑得太紧的分开一点,太远......
  • 【LeetCode数据结构04】字符串String
    TableofContents双指针344.反转字符串541.反转字符串II剑指Offer05.替换空格151.翻转字符串里的单词剑指Offer58-II.左旋转字符串KMP28.实现strStr459.重复的子字符串Solutions344.反转字符串力扣题目链接思路代码541.反转字符串II......
  • go语言调度gmp数据结构
    go语言调度gmp数据结构g表示goroutine,它是待执行的任务m表示操作系统的线程,它由操作系统的调度器调度和管理p表示处理器,可以把它看作在线程上运行的本地调度器Ggoroutine是go语言调度器中待执行的任务,它在运行时调度器中的地位和线程在操作系统中的地位差不多,但是它占......
  • 数据结构--树和森林
    数据结构--树和森林树和森林森林是m棵互补相交的树的集合.将树去掉根结点可以变成森林,将森林的每个树全部加上根结点可以变成一颗树.1.双亲表示法数据域:存放数据双亲域:存放双亲结点在数组当中的位置.特点:找双亲容易,找孩子难.双亲表示法使用结构体数组存储首先定......
  • ACM板子(1)(缺最短路、计算几何、数学、高级数据结构)
    ACM板子(1)(缺最短路、计算几何、数学、高级数据结构)快排、归并voidquicksort(int*num,intl,intr){if(r<=l)return;intx=l-1,y=r+1,z=num[l+r>>1];while(x<y){dox++;while(num[x]<z);doy--;while(num[y]>z);if(x<y)s......
  • 学校的数据结构实验_二叉树c语言实现
    二叉树的实现包括二叉树的构建,和二叉树的前中后序便利,二叉树的层序非递归遍历,求二叉树的总结点,求二叉树的最大深度和求二叉树的最大宽度,因为实验主要是对二叉树的各个属性数据测量,所以这里手动链接了一颗二叉树.随后用调用函数接口传参二叉树的根节点测量二叉树的属性.递......
  • 学校数据结构实验_线性表:纯C语言版
    首先分别声明链表和顺序表的结构单位,  1:插入实现:顺序表插入比较简单,直接访问下表找到插入位置,然后移动所有后面的数据将插入的位置空出来,然后将需要插入的数据插入,链表的插入:因为一般链表都是调用头插或者尾插,但是为了和顺序表相比较,再插入的时候增加了随机位置......
  • 数据结构 幂等性是什么?
    https://blog.csdn.net/qq_34801169/article/details/114374827一、幂等性:幂等性,是分布式环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果是一致的。也就是说,用户对于同一操作,无论是发起一次请求还是多次请求,最终的执行结果是一致的,不会......
  • 关于数据结构
    1月15日,TSOI2022迎来了曾获NOI铜牌的Vergil学长!而Vergil线下课的第一个板块就是——数据结构。本文会梳理Vergil所讲的所有数据结构,我们进入正题。2023.2.14感谢大佬L3067545513帮忙修改LCA~2023.2.19ST表被批评了QAQ线段树引入线段树,顾名思义,我们......
  • 2022年考研数据结构_3 栈和队列
    文章目录3.栈和队列3.1栈3.1.1栈的定义3.1.2栈的实现3.1.3栈的应用(1)递归(2)四则运算表达式求解①中缀表达式转后缀表达式②后缀表达式的计算3.2队列3.2.1队列的定义3.2.2队列的实现3.2.2队列的应用3.3应用3.3.1表达式语言表示1--中缀转后缀语言表述2--中缀转后缀优......