前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生信技能树-R语言-day3

生信技能树-R语言-day3

原创
作者头像
VOHOKO
发布2024-04-19 14:44:41
470
发布2024-04-19 14:44:41

上次作业:

代码语言:r
复制
#向量g中有多少个元素在向量s中存在(要求用函数计算出具体个数)?将这些元素筛选出来
#提示:%in%
length(g %in% s) # 错误,因为%in%产生的逻辑值中,T和F都存在,所以都会被计算个数,相当于length计算的是逻辑值的个数
g[g %in% s]
#正确答案
table(g %in% s)
sum(g %in% s) # sum也可以
length(intersect(g,s)) #交集会去掉重复
g[s %in% g] #只对s负责,和g没有关系

#生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
a = rnorm(n=10,mean=0,sd=18);a
a[a<-2] # 错误,<- 是赋值的符号
#正确答案
a[a<(-2)] # 拆开<-
a[a< -2] # 拆开<-

一维:向量

二维:

  • 矩阵matrix 只有一种数据源类型
  • 数据框 data.frame 每列只有一种数据类型

list列表:可以装的下一切(数据,向量,矩阵,数据框)


数据框 新建

  1. 新建数据框data.frame()
  2. 读取数据框 read.csv()
代码语言:r
复制
> 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
代码语言:r
复制
> df2 <- read.csv("gene.csv")
> df2
   
  gene change score
  1 gene1     up     5
  2 gene2     up     3
  3 gene3   down    -2
  4 gene4   down    -4

数据框的属性

代码语言:r
复制
> dim(df1)# 列和行分别有几个子集

> nrow(df1)# 有几个子集行

 
> ncol(df1)# 有几个子集列
  
 > rownames(df1)# 行分别有几个子集名字
 [1] "1" "2" "3" "4"
 
 > colnames(df1)#列分别有几个子集名字
 [1] "gene"   "change" "score"

取子集

  1. $
  2. 按照坐标:数据框[ 行 , 列 ]
  3. 按照名字:数据框[ “行名字” , “列名字” ]
  4. 按照逻辑值:数据框$
代码语言:r
复制
> 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
  
  > k = df1$score>0;k
[1]  TRUE  TRUE FALSE FALSE
> df1[k,]  # [ ] 取ture对应的子集,按照逻辑值取子集,所以保留了score>0的数据
   
   gene change score
1 gene1     up     5
2 gene2     up     3
  #因为是一个矩阵,所以要有逗号来区分行和列

数据的修改

  1. 修改一个数据

文件名[第几行 ,第几列] = 赋值修改后的数据

  1. 修改一个列的数据

文件名$列名 = c()赋值修改后的向量(先提取一个列$,再修改)

  1. 增加一列的数据

文件名$列名 = c()赋值修改后的向量($提取的是一个全新的列名,之前不存在的)

  1. 修改行名

rownames() = c()赋值修改后的向量 (行名都是一样的)

  1. 修改其中一列的列名

colnames(文件名)[第几列]= “”赋值列的名字(每一列名字都不一样)

两个数据框的连接:

  • merge(数据框1,数据框2,by = “共同列的名字”) (有一个相同列的名字)
  • merge(数据框1,数据框2,by.x = “x列的名字”, by.y = “y列的名字”) (没有相同的列的名字)

矩阵 新建 (不适用$提取)

m = matrix(向量,nrow = 分成多少行就写几的数字 )

矩阵的行 列 写成了[]形式

代码语言:r
复制
> m <- matrix(1:9, nrow = 3) # 1:9 是一个向量,把他们排成三行
> m
     
      [,1] [,2] [,3]

[1,]    1    4    7

[2,]    2    5    8

[3,]    3    6    9

矩阵取子集m[x,y]

矩阵的转置和转换 t()

转置(将行和列互转,要先给列改名,不然转置没有区别

代码语言:r
复制
> colnames(m) <- c("a","b","c") #加列名  不支持$取
> 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

转换为数据框 m = as.data.frame()

可以用class来判断是否转换成功


list列表 新建

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

取子集:

  1. 用$
  2. [ [] ]

删除变量

删除一个:rm()

删除多个:rm( , )

删除全部:rm(list = ls())

清空控制台:contral+l


  • 如何判断是矩阵还是数据框
  1. 根据生成她的函数
  2. 用class和is族函数判断
  • pheatmap::pheatmap(m)
  • 给元素补充名字

names() = c("")

生信技能树 day3 上课笔记

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档