学习笔记Day3:数据框、矩阵和列表

这篇具有很好参考价值的文章主要介绍了学习笔记Day3:数据框、矩阵和列表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构之数据框、矩阵和列表

要经常检查代码生成的结果,警惕不报错的错误

向量:一维

表格:二维

列表:三维

判断数据结构:class()或is族函数判断,或根据其生成的函数来判断

数据框(Data.frame)

二维,每列只允许一种数据类型

数据框来源

  1. 用代码新建
  2. 由已有数据转换或处理得到
  3. 读取表格文件
  4. R语言内置数据(iris,volcano等)

数据框新建

data.frame()

变量名称只起到提示作用,不起决定作用

df1 <- data.frame(gene   = paste0("gene",1:4),
                 change  = rep(c("up","down"),each = 2),
                 score   = c(5,3,-2,-4))
df1
##    gene change score
## 1 gene1     up     5
## 2 gene2     up     3
## 3 gene3   down    -2
## 4 gene4   down    -4

df2 <- read.csv("gene.csv")   #读取文件

数据框属性

dim()维度(dimension)

nrow()行;rownames()行名

ncol()列;colnames()列名

数据框取子集

  1. 取某一列:$取数据框中的一列,按Tab键自动补齐

    df1$score
    
    ## [1]  5  3 -2 -4
    
  2. 按坐标:[行号,列号]

    df1[2,2]
    ## [1] "up"
    df1[2,]
    ##    gene change score
    ## 2 gene2     up     3
    df1[,2]
    ## [1] "up"   "up"   "down" "down"
    df1[c(1,3),1:2]
    ##    gene change
    ## 1 gene1     up
    ## 3 gene3   down
    
  3. 按名字:[行名,列名]

    ## 按名字
    df1[,"gene"]
    ## [1] "gene1" "gene2" "gene3" "gene4"
    df1[,c('gene','change')]   ##可以按名字同时取多列,使代码变得易读
    ##    gene change
    ## 1 gene1     up
    ## 2 gene2     up
    ## 3 gene3   down
    ## 4 gene4   down
    
  • 中括号里的逗号,表示维度的分割

数据框修改

  1. 修改:将需要修改的内容提取后进行重新赋值

    df1[3,3] <- 5
    df1
    ##    gene change score
    ## 1 gene1     up     5
    ## 2 gene2     up     3
    ## 3 gene3   down     5
    ## 4 gene4   down    -4
    
    
    df1$score <- c(12,23,50,2)     
    df1
    ##    gene change score
    ## 1 gene1     up    12
    ## 2 gene2     up    23
    ## 3 gene3   down    50
    ## 4 gene4   down     2
    
  2. 新建:$后接尚未存在的列名,即是新建列

    df1$p.value <- c(0.01,0.02,0.07,0.05) 
    df1
    ##    gene change score p.value
    ## 1 gene1     up    12    0.01
    ## 2 gene2     up    23    0.02
    ## 3 gene3   down    50    0.07
    ## 4 gene4   down     2    0.05
    
  3. 修改列名或行名

    将行名和列名视为向量去做修改

    #改行名和列名
    rownames(df1) <- c("r1","r2","r3","r4")
    #只修改某一行/列的名
    colnames(df1)[2] <- "CHANGE"
    

两个数据框的连接

  1. 两个数据框根据有交集的一列合并(取交集)

    test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), 
                        blood_type = c("A","B","O","AB"))
    test1
    ##     name blood_type
    ## 1  jimmy          A
    ## 2 nicker          B
    ## 3  Damon          O
    ## 4 Sophie         AB
    
    test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
                        group = c("group1","group1","group2","group2"),
                        vision = c(4.2,4.3,4.9,4.5))
    test2
    ##     name  group vision
    ## 1  Damon group1    4.2
    ## 2  jimmy group1    4.3
    ## 3 nicker group2    4.9
    ## 4   tony group2    4.5
    
    
    merge(test1,test2,by="name")
    ##     name blood_type  group vision
    ## 1  Damon          O group1    4.2
    ## 2  jimmy          A group1    4.3
    ## 3 nicker          B group2    4.9
    
    test3 <- data.frame(NAME = c('Damon','jimmy','nicker','tony'),
                        weight = c(140,145,110,138))
    test3
    ##     NAME weight
    ## 1  Damon    140
    ## 2  jimmy    145
    ## 3 nicker    110
    ## 4   tony    138
    
    merge(x=test1,x=test3,by.x = "name",by.y = "NAME")
    ##     name blood_type weight
    ## 1  Damon          O    140
    ## 2  jimmy          A    145
    ## 3 nicker          B    110
    
  2. 取合集:查看帮助文档

  • 代码和数据不匹配:改数据/改代码

数据框按照逻辑值取子集【有点难】

df1 <- data.frame(gene   = paste0("gene",1:4),
                  change  = rep(c("up","down"),each = 2),
                  score   = c(5,3,-2,-4))
k = df1$score>0;k
## [1]  TRUE  TRUE FALSE FALSE
df1[k,]
##    gene change score
## 1 gene1     up     5
## 2 gene2     up     3
  • 将满足K这一条件的行提取出来。
    学习笔记Day3:数据框、矩阵和列表,丘山的读书笔记,学习,笔记,r语言,数据分析
    筛选score > 0的基因,如下两种写法
df1[k,1]
## [1] "gene1" "gene2"
df1$gene[k]
## [1] "gene1" "gene2"
df1$gene[df1$score>0]
## [1] "gene1" "gene2"

矩阵(Matrix)

二维,只允许一种数据类型

矩阵新建和取子集

  1. 新建:matrix(), nrow/ncol设置行数或列数

    m <- matrix(1:9, nrow = 3)
    colnames(m) <- c("a","b","c") #加列名
    m
    ##      a b c
    ## [1,] 1 4 7
    ## [2,] 2 5 8
    ## [3,] 3 6 9
    
  2. 取子集与数据框相同

    m[2,]
    ## a b c 
    ## 2 5 8
    m[,1]
    ## [1] 1 2 3
    m[2,3]
    ## c 
    ## 8
    m[2:3,1:2]
    ##      a b
    ## [1,] 2 5
    ## [2,] 3 6
    

矩阵的转置和转换

  1. 转置:t()以1 5 9为中轴转置

    m
    ##      a b c
    ## [1,] 1 4 7
    ## [2,] 2 5 8
    ## [3,] 3 6 9
    t(m)
    ##   [,1] [,2] [,3]
    ## a    1    2    3
    ## b    4    5    6
    ## c    7    8    9
    
  2. 转换:所有矩阵可以转换成数据框as.data.frame()

    as.data.frame(m)
    ##   a b c
    ## 1 1 4 7
    ## 2 2 5 8
    ## 3 3 6 9
    
    • 没有赋值就没有发生变化!运行完as.data.frame(m)后m还是矩阵

矩阵画热图

热图函数heatmap需求矩阵数据类型

pheatmap::pheatmap(m)

学习笔记Day3:数据框、矩阵和列表,丘山的读书笔记,学习,笔记,r语言,数据分析

  • 热图给数据进行了聚类,将相似性高的行/列放在一起展示。这是该函数的默认值。
pheatmap::pheatmap(m,cluster_cols = F,cluster_rows = F)

学习笔记Day3:数据框、矩阵和列表,丘山的读书笔记,学习,笔记,r语言,数据分析

  • 更改参数后,此时图和矩阵完全一致。
  • 当默认不符合预期时,可以在作者允许的范围内自定义。

列表(List)

列表新建和取子集

  1. 新建:list(),列表的每个元素可以是任何数据结构和类型

    x <- list(m1 = matrix(1:9, nrow = 3),
              m2 = matrix(2:9, nrow = 2))
    x
    ## $m1
    ##      [,1] [,2] [,3]
    ## [1,]    1    4    7
    ## [2,]    2    5    8
    ## [3,]    3    6    9
    ## 
    ## $m2
    ##      [,1] [,2] [,3] [,4]
    ## [1,]    2    4    6    8
    ## [2,]    3    5    7    9
    
  2. 取子集:[[]]$

    • [[]]中接元素的序号或名字

      x[[1]]
      ##      [,1] [,2] [,3]
      ## [1,]    1    4    7
      ## [2,]    2    5    8
      ## [3,]    3    6    9
      
    • $后接元素名字,可以tab补齐

      x$m1
      ##      [,1] [,2] [,3]
      ## [1,]    1    4    7
      ## [2,]    2    5    8
      ## [3,]    3    6    9
      

元素的名字names()

列表的元素有名字,向量的元素也可以有名字

scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")
scores
##  jimmy nicker  Damon Sophie   tony 
##    100     59     73     95     45
  • scores仍然是数值型,名字不影响数据类型。
#应用!
scores["jimmy"]
## jimmy 
##   100
scores[c("jimmy","nicker")]
##  jimmy nicker 
##    100     59
names(scores)[scores>60]
## [1] "jimmy"  "Damon"  "Sophie"

删除变量

  1. 删除某个变量 rm(x)
  2. 删除多个变量rm(df1,df2)
  3. 删除环境中所有变量rm(list = ls()) 最常用
  4. 清空控制台Ctrl+L
  • tibble::column_to_rownames()可以将第一列变成行名,然后删除第一列
  • 另:一个有趣但不好理解的事情——数据框是一种特殊的列表。
    数据框封装了列(向量),列表封装什么都可以(个人理解,故此[[]]$取列和取列表元素相同

以上来自生信技能树课程!给小洁老师比心~文章来源地址https://www.toymoban.com/news/detail-838549.html

到了这里,关于学习笔记Day3:数据框、矩阵和列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python系统学习Day3

    python函数的参数共有五种类型 参数定义的顺序必须是:必选参数, 默认参数, 可变参数, 命名参数, 参数 理解起来有两种分类方式:普通参照位置的参数/、 / 参数, 固定个数的参数 / 可变参数。 位置参照在前,固定个数在前。 部分类型可指定默认值

    2024年02月19日
    浏览(44)
  • 前端学习——ajax (Day3)

    使用 XMLHttpRequest XMLHttpRequest - 查询参数 XMLHttpRequest - 数据提交 Promise - 三种状态

    2024年02月16日
    浏览(45)
  • 【剑指offer】学习计划day3

      目录 一. 前言  二.替换空格         a.题目          b.题解分析           c.AC代码 三. 左旋转字符串          a.题目         b.题解分析         c.AC代码   本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。详情查看以下链接: 剑指offer-学习计划htt

    2024年02月13日
    浏览(98)
  • 前端学习——JS进阶 (Day3)

    面向过程编程 面向对象编程 (oop) 练习 constructor 属性 对象原型 原型继承 原型链

    2024年02月16日
    浏览(40)
  • 【C++】day3学习成果:类

    1.自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量 成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 头文件stack.h: 源文件stack.cpp: 主函数main.cpp: 运行结果: 2.自行封装一个循环顺序队列

    2024年02月09日
    浏览(42)
  • 黑马头条项目学习--Day3: 自媒体文章发布

    自媒体后台搭建 ①:资料中找到heima-leadnews-wemedia.zip解压 拷贝到heima-leadnews-service工程下,并指定子模块 执行leadnews-wemedia.sql脚本 添加对应的nacos配置 ②:资料中找到heima-leadnews-wemedia-gateway.zip解压 拷贝到heima-leadnews-gateway工程下,并指定子模块 添加对应的nacos配置 图片上传的

    2024年02月13日
    浏览(67)
  • 【Node.js学习 day3——http模块】

    命令行 ctrl + c 停止服务 当服务启动后,更新代码必须 重启服务才能生效 响应内容中文乱码的解决办法 端口号被占用 关闭当前正在运行监听端口的服务(使用较多) 修改其他端口号 HTTP协议默认端口是80。HTTP服务开发常用端口有3000,8080,8090,9000等。 想要获取请求的数据,需

    2024年02月02日
    浏览(54)
  • 深度学习DAY3:神经网络训练常见算法概述

    这是最常见的神经网络训练方法之一。它通过计算损失函数对权重的梯度,并沿着梯度的反方向更新权重,从而逐步减小损失函数的值。梯度下降有多个变种,包括随机梯度下降(SGD)和小批量梯度下降。 反向传播是一种基于链式法则的方法,用于计算神经网络中每个神经元

    2024年02月07日
    浏览(45)
  • Vue学习Day3——生命周期\组件化

    Vue生命周期:就是一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个阶段:① 创建 ② 挂载 ③ 更新 ④ 销毁 1.创建阶段:创建响应式数据 2.挂载阶段:渲染模板 3.更新阶段:修改数据,更新视图 4.销毁阶段:销毁Vue实例 Vue生命周期过程中,会 自动运行一些函数 ,被称

    2024年02月15日
    浏览(47)
  • 【javaweb】学习日记Day3 - Ajax 前后端分离开发 入门

    目录 一、Ajax 1、简介 2、Axios (没懂 暂留) (1)请求方式别名 (2)发送get请求 (3)发送post请求 (4)案例 二、前端工程化 1、Vue项目-目录结构 2、Vue项目-启动 (1)vscode页面启动 (2)cmd命令框启动 3、配置Vue端口号 4、Vue项目开发流程 三、Vue组件库 - Element  1、快速入门

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包