前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jely's Note之生信入门class3

Jely's Note之生信入门class3

原创
作者头像
用户10556369
修改2023-05-17 20:26:35
6130
修改2023-05-17 20:26:35
举报
文章被收录于专栏:Jely’s生信笔记Jely’s生信笔记

#本文引用自生信技能树

【课前概念辨析】

1. 变量(本身是变量也是一个名字)=是一种容器,包含向量、数据框、任何

变量这个名称只是对使用者起提示作用,不起决定作用

eg. x/y/z,都是可变的东西。

2.向量是一维的【r语言的一个数据,可以被赋值】=是被装进变量里的东西,是固定的

eg.数字1:5、字符串“a”、“b”、逻辑值“T”“F”“T”

3.“表格”是二维的【为什么要学,因为有些函数只接受某种表格】

matrix 矩阵-二维:只允许一种数据类型

data.frame 数据框-二维:每列只允许一种数据类型

list列表:可装万物、看成一个大盒子

4.可用class/is判断函数类型,as族函数可生成其他的函数

!【上课内容】!

一、数据框【将内容作成表格、画图】

来源:1.代码新建、2.读取表格文件、3.现有数据转换或处理、4.R语言内置数据

1.用代码新建一个名为df1的数据框

代码语言:javascript
复制
df1 <- data.frame(gene=paste0("gene",1:4),
在gene的那一列,有1到4个数,并且与gene结合
eg.
gene 
1 gene1    
2 gene2    
3 gene3  
4 gene4   
>change=rep(c("up","down"),each = 2),

代码语言:javascript
复制
在change的那一列重复up和down,每个两次
eg.
 change
  up    
  up     
 down    
 down    
>df1$change=rep(c("up","down"),times=2),
eg.
 change 
    up   
  down    
    up    
  down   
                 score   = c(5,3,-2,-4))

给score赋值5,3,-2,-4

说明:<-赋值,data.frame生成数据框的函数,gene、change、score是列名、=等于号后面的是函数,函数里面的内容就是列的内容,三个列名分别用逗号隔开。

代码语言:javascript
复制
eg.
score
  5
  3
 -2
 -4

2.从文件中读取read函数

变量<-read.文件类型(“文件名”)

代码语言:javascript
复制
eg.
>df2 <- read.csv("gene.csv");df2

报错情况:

如果没有用R.project的方式打开工作目录,而你所要的目的文件在project里,就算你输入的代码是正确的你也是是打不开的!

正确处理:只有你所要读取的目的文件在你开着的R.project的同个文件夹中才能运行代码打开

3.数据框的属性【这个属性是指数据框中黑色加粗的字体,不属于表格内容!只是表格的属性!不在行列统计范围内】

代码语言:javascript
复制
df1.csv 
gene change score
1 gene1     up     5
2 gene2     up     3
3 gene3   down    -2
4 gene4   down    -4

统计一个数据有几行几列的函数是dim【与dim类似的函数是table】

>dim(df1) 维度

[1] 4 3 有四行三列

>a=iris

table(a)会统计每个值出现的次数

代码语言:javascript
复制
       0.1        0.2        0.3        0.4        0.5 
         5         29          7          7          1 
       0.6        1.0        1.1        1.2        1.3 
         1          8          4          7         20 
       1.4        1.5        1.6        1.7        1.8 
        21         25         11          6         12 
       1.9        2.0        2.1        2.2        2.3 
         7          7          6          6         12 
       2.4        2.5        2.6        2.7        2.8 
         6         11          5          9         14 
       2.9        3.0        3.1        3.2        3.3 
        10         27         11         13          8 
       3.4        3.5        3.6        3.7        3.8 
        12          8          5          4          7 
       3.9        4.0        4.1        4.2        4.3 
         5          6          4          5          3 
       4.4        4.5        4.6        4.7        4.8 
         8          9          7          7          9 
       4.9        5.0        5.1        5.2        5.3 
        11         14         17          6          3 
       5.4        5.5        5.6        5.7        5.8 
         8         10         12         11         10 
       5.9        6.0        6.1        6.2        6.3 
         5          8          9          4         10 
       6.4        6.5        6.6        6.7        6.8 
         8          5          3         10          3 
       6.9        7.0        7.1        7.2        7.3 
         5          1          1          3          1 
       7.4        7.6        7.7        7.9      
         1          1          4          1        
     setosa  versicolor  virginica 
       50         50         50 

使用table时,可以将数据框中某列指定为向量或因子变量

代码语言:javascript
复制
>df1$change <- factor(df1$change)
table(df1$change)
down   up 
   2    2 

3.处理数据框的常用函数:

代码语言:javascript
复制
df1. 
gene change score
1 gene1     up     5
2 gene2     up     3
3 gene3   down    -2
4 gene4   down    -4

1)nrow()#回答多少行的函数

> nrow(df1)

[1] 4

2)ncol()#回答多少列的函数

> ncol(df1)

[1] 3

3)rownames()#回答行名是什么

> rownames(df1)

[1] "1" "2" "3" "4"

4)colnames()#回答列名是什么

> colnames(df1)

[1] "gene" "change" "score"

4.数据框取子集【只适用于数据框!并不适用于矩阵数据】

代码语言:javascript
复制
df1. 
gene change score
1 gene1     up     5
2 gene2     up     3
3 gene3   down    -2
4 gene4   down    -4

【小心矩阵!不能用$】【矩阵可以用中括号,y[]】

1)提取数据框的列名函数$:df1$change 【一次只能取一列】

[1] "up" "up" "down" "down"

2)平均值的函数:

mean(df1$score)

【数字运算时,小心字符!因为做运算,字符是做不了运算的,所以记得用class,

如果是字符,要改!记得改全部!】

3)按坐标取子集,用中括号表示[行,列]:

代码语言:javascript
复制
gene change score
1 gene1     up     5
2 gene2     up     3
3 gene3   down    -2
4 gene4   down    -4

eg.[行,列] 【2,】是取的是第二个行;【,2】取出的是第二列向量

代码语言:javascript
复制
> df1[2,2]
[1] "up"

> df1[2,]
   gene change score
 2 gene2     up     3

> df1[,2]
[1] "up"   "up"   "down" "down"

4)中括号里的逗号,是维度的分割

【中括号是取子集的函数】

eg. > df1[c(1,3),1:2]

中括号表示是取df1中的数据,c(1,3)是取第一行和第三行的数据,逗号表示维度的分割,1:2是取第一列与第二列的数据

代码语言:javascript
复制
eg.
   gene change
1 gene1     up
3 gene3   down

5)向量x只有一个维度=只有一行,无法取行列;

只有数据框或矩阵才有两个以上的维度才可以直接用中括号取子集

>x[1,5] 不可以

>x[c(1,5)] 可以运行,c(1,5)是一个长度为2的整数向量,它告诉R语言要选择x向量中的第1个和第5个元素。

x=1,2,3,4,5

[1] 1 5

6)数据框取自己,按名字提取列信息

变量[“行名”,”列名“]

代码语言:javascript
复制
df1
   gene change score
1 gene1     up     5
2 gene2     up     3
3 gene3   down    -2
4 gene4   down    -4
代码语言:javascript
复制
eg.
> df1[,"gene"]    取gene基因这一列的数据
[1] "gene1" "gene2" "gene3" "gene4"

> df1[,c('gene','change')]    取gene和change这一列的数据
   gene change
1 gene1     up
2 gene2     up
3 gene3   down
4 gene4   down

7)#按(逻辑值)条件筛选基因,用中括号[]将条件包裹【!取出来的是符合条件的子集】

筛选score > 0的基因

> df1[df1$score > 0,]内容写在逗号前取子集是按行来取子集

取df1数据框中score那一列大于0的df1值如第一行、第二行

代码语言:javascript
复制
   gene change score
1 gene1     up     5
2 gene2     up     3

> df1$score > 0

[1] TRUE TRUE FALSE FALSE

代码语言:javascript
复制
df1:
gene change score
1 gene1     up     5
2 gene2     up     3
3 gene3   down    -2
4 gene4   down    -4

> df1$gene[df1$score > 0]
代码语言:javascript
复制
[1] "gene1" "gene2"

> df1[df1$score > 0,]
 gene change score
1 gene1     up     5
2 gene2     up     3

【用于取子集的逻辑值向量:需要与x对应,不必须由x生成

代码语言:javascript
复制
x=c(30,50,60,38)
y=c("jj","ss","ff","tt")
y[x>40]---这样是不可以的
x与y有对应关系!才可以!】

8)如何取数据框的最后一列?

变量[,ncol(变量)]这个函数:与最后一列绑定!!当用于批量处理的时候!更加方便

代码语言:javascript
复制
df1:
gene change score
1 gene1     up     5
2 gene2     up     3
3 gene3   down    -2
4 gene4   down    -4

>df1[,ncol(df1)]
> df1[,3]
[1]  5  3 -2 -4

9)如何取数据框除了最后一列以外的其他列?用减号!-

代码语言:javascript
复制
> df1[,-ncol(df1)]
   gene change
1 gene1     up
2 gene2     up
3 gene3   down
4 gene4   down

【减号是按照数字和位置来取,!叹号才是是逻辑值取否】

10)数据框的修改=赋值

代码语言:javascript
复制
df1:
gene change score
1 gene1     up     5
2 gene2     up     3
3 gene3   down    -2
4 gene4   down    -4

(1)改一个格:变量[行,列]=修改值

代码语言:javascript
复制
> df1[3,3] <- 5
> df1

(2)改一整列:变量$列名=c()修改值

代码语言:javascript
复制
> 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

(3)新增一列!:变量$新的列名【就是新增一列!/原有命名则会修改原本数值】

代码语言:javascript
复制
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

(4)改行名和列名【本质是向量、字符串】

代码语言:javascript
复制
改全部行名:rownames(变量)=c(“”,“”,“”,“”)
> rownames(df1) =c("r1","r2","r3","r4")
eg.
将行名改为flower1、2、3、4、5、
rownames(a)= paste0("flower",1:nrow(a))
1:nrow(a)行名是取1到a个数值的数,1、2、3...完全不会出问题!

只修改某一列名:colnames(变量)[第几列]=修改值“”
> colnames(df1)[2] <- "CHANGE"

(5)两个数据框的连接【智能的连接】

【使用:差异分析结果,分析基因的结果,注释的信息,对应每个基因的连接】

函数:merge( ,by=“共同的列的列名”记得打引号!)

eg.x=test1,y=test3

merge(test1,test3,by.x="name",by.y="NAME“)

大小写相同的同列名!内容有交集,要想连接!可以先改成一样的!!as()——转变

【可自行搜索-左连接、右连接、取合集】【如何按照数据框的某一列给整个数据框排序/去重复】

【内置数据有数据框,但不是所有都是数据框】

-------------------------------------------------------------------------------

(6)矩阵新建和取子集【不支持$】

代码语言:javascript
复制
1.#新建矩阵:变量=matrix();nrow最后一行是3
 m <- matrix(1:9, nrow = 3)

2.#加列名:colname(变量)=c("","","")

> colnames(m) <- c("a","b","c") 
> m
     a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

> m[2,]行
a b c 
2 5 8 
> m[,1]列
[1] 1 2 3
> m[2,3]
c 
代码语言:javascript
复制
8 
> m[1:2,1:2]
     a b
[1,] 2 5
[2,] 3 6
> m
     a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

(7)注意: #单独as的时候!是不会改变数据结构,应该赋值!

代码语言:javascript
复制
as.data.frame(m)
  a b c
1 1 4 7
2 2 5 8
3 3 6 9
>class(m)
matrix\array
>m=as.data.frame(m)!应该赋值!!!
【R语言里的修改,都要赋值!!!,没有赋值就没有发生过】
>class(m)
"data.frame"

(8)矩阵画热图!!!热图必须用矩阵!!---热图是矩阵的可视化!

应该有对应关系!

代码语言:javascript
复制
> m
     a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
代码语言:javascript
复制
>pheatmap::pheatmap(m,cluster_cols=T,cluster_row=T)

聚类树-相似的行和列相互凑--展示数据变化及变化规律

代码语言:javascript
复制
>pheatmap::pheatmap(m,cluster_cols=F,cluster_row=F)

只有当不聚类时,格子才与数字一一对应;什么样的数据出什么样的图!

【当默认的设置不符合你的预期,可以在作者允许的范围内自定义】

(9)列表新建和取子集

代码语言:javascript
复制
#list生成列表、矩阵的函数【包容性很强!】
<-list(m1=matrix(1:9,nrow=3),
       m2 = matrix(2:9, nrow = 2))
代码语言:javascript
复制
> l叫l的列表装着矩阵
$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

画图时要拿表格中的子集取出来才能画图!!!

两种提取方式!!

(10)从列表中提取矩阵

【矩阵】l[[2]]只把矩阵提取出来!用两个中括号

代码语言:javascript
复制
 [,1] [,2] [,3] [,4]
[1,]    2    4    6    8
[2,]    3    5    7    9

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

(11)元素的名字names(变量)=c(“”)

代码语言:javascript
复制
> 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 

【加上了名字,向量的元素还是五个数字,名字是向量的属性!不属于正文!不影响!】

作用:直观!取子集!

代码语言:javascript
复制
> scores["jimmy"]
jimmy 
  100 
> scores[c("jimmy","nicker")]
 jimmy nicker 
   100     59 
> names(scores)[scores>60]
[1] "jimmy"  "Damon"  "Sophie"
【向量取子集的代码,y[x>0],x[y],x与y有关联有对应,人名与分数相关

(12)删除变量

函数:

删除一个rm(l)

删除多个 rm(df1,df2)

清空控制台ctrl+l不等于数据消失

!!!删除全部【固定命令】> rm(list = ls()) --ls列出环境里有哪些变量

清空环境所有的变量

【课堂作业】

1.筛选出向量g中下标为偶数的基因名。

g[seq(2,100,2)] 因为g有100个数据

2.向量g中有多少个元素在向量s中存在(要求用函数计算出具体个数)

table()函数来取

table(g%in%s)

FALSE TRUE

37 63

3.[]取交集的时候会去重复,而%in%取子集不会去重复【要不要去重复】

4.需要撤回时,可用函数:set.seed(10086) rnorm(10),代码运行了没办法赋值

5.<-容易成赋值,加空格就可以,还可以加()括起来可以分割!

6.代码不报错,不代表真的没错,要检查目的是否达到【不报错是最低要求】

7.判断答案是否正确,与会不会代码无关

9求test第一列数值的中位数

代码语言:javascript
复制
median(test$Petal.Length)
median(test[,1])

10.筛选test中,Species列的值为a或c的行

反选和列出所有条件

代码语言:javascript
复制
test[test$Species!="b",]
test[test$Species=="a"|test$Species=="c",]
代码语言:javascript
复制
【test[test$Species=="a"|“c",]无法运行,因为前后向量不行
operations are possible only for numeric, logical or complex types】

必须test[test$Species=="a"|test$Species=="c",]

!!!%in%很重要!!!多用!因为当筛选的条件很多时,用百分百in更快

test[test$Species %in% c("a","c"),]

==是等位运算,一一对应的!对应的有顺序的!

10.如果没有逗号,直接(a)取的是列!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档