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

生信技能树DAY 3 R语言入门

原创
作者头像
用户11064093
修改2024-04-12 11:16:09
1990
修改2024-04-12 11:16:09

作业讲解

  1. R data 文件:存储有用变量,传递数据 save load
代码语言:r
复制
# 使用save()函数保存为RData文件
# 创建一些要保存的变量
study1.df <- data.frame(id = 1:5, 
                        sex = c("m", "m", "f", "f", "m"), 
                        score = c(51, 20, 67, 52, 42))

score.by.sex <- aggregate(score ~ sex, 
                          FUN = mean, 
                          data = study1.df)

study1.htest <- t.test(score ~ sex, 
                       data = study1.df)
# save(变量1,变量2, ..., file = "文件名.RData") 保存于当前工作目录
save(study1.df, score.by.sex, study1.htest,
     file = "study1.RData")
# 如果有多个变量想要保存,使用save函数比较繁琐因为必须要输入每个变量名称,可使用save.image()函数保存工作目录下所有的变量。
save.image(file = "study1.RData")
# 使用load()函数加载RData文件
load(file = "study1.RData")
# 删除变量rm()见后文
  1. %in% 与 intersect取交集 的区别:取交集会自动去除重复值
  2. 使用负号注意不要写成赋值符号
代码语言:r
复制
# 生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
x <- rnorm(n=10,mean=0,sd=18)
x[x< -2]# x[x<-2]会把2赋值给x 要加空格或者加括号
代码语言:r
复制
## [1] -30.627262  -5.327866 -18.030441  -3.135825 -16.232720
代码语言:r
复制
x[x<(-2)]
代码语言:r
复制
## [1] -30.627262  -5.327866 -18.030441  -3.135825 -16.232720

课堂内容

| 向量

| 矩阵 只能有一种数据 是特殊的数据框

| 数据框 一列只能有一种数据

| 列表 没有限制

| 区分矩阵和数据框:根据生成它的函数 或 class() is()族函数

重点:数据框

1.数据框来源

(1)用代码新建

(2)由已有数据转换或处理得到

(3)读取表格文件

(4)R语言内置数据

2.新建和读取数据框

代码语言:r
复制
# data.frame 函数
df1 <- data.frame(gene   = paste0("gene",1:4),
                 change  = rep(c("up","down"),each = 2),
                 score   = c(5,3,-2,-4))
df1
代码语言:r
复制
##    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")

3.数据框属性

代码语言:r
复制
#维度 行数 列数
dim(df1)
代码语言:r
复制
## [1] 4 3
代码语言:r
复制
nrow(df1)
代码语言:r
复制
## [1] 4
代码语言:r
复制
ncol(df1)
代码语言:r
复制
## [1] 3
代码语言:r
复制
#行名 列名
rownames(df1)
代码语言:r
复制
## [1] "1" "2" "3" "4"
代码语言:r
复制
colnames(df1)
代码语言:r
复制
## [1] "gene"  "change" "score"

4.数据框取子集,注意按逻辑值取子集的难点

代码语言:r
复制
# $取列
df1$gene  
代码语言:r
复制
## [1] "gene1" "gene2" "gene3" "gene4"
代码语言:r
复制
mean(df1$score)#删掉score,按tab键试试 自动显示列名
代码语言:r
复制
## [1] 0.5
代码语言:r
复制
## 按坐标
df1[2,2]# 第二行第二列数据
代码语言:r
复制
## [1] "up"
代码语言:r
复制
df1[2,]# 第二行 带行名列名,还是数据框
代码语言:r
复制
##    gene change score
## 2 gene2     up     3
代码语言:r
复制
df1[,2]# 第二列 不带行名列名,是向量
代码语言:r
复制
## [1] "up"   "up"   "down" "down"
代码语言:r
复制
df1[c(1,3),1:2] # 多行多列 数据框
代码语言:r
复制
##    gene change
## 1 gene1     up
## 3 gene3   down
代码语言:r
复制
df1[,ncol(df1)] # 取最后一列
代码语言:r
复制
## [1]  5  3 -2 -4
代码语言:r
复制
## 按名字
df1[,"gene"]
代码语言:r
复制
## [1] "gene1" "gene2" "gene3" "gene4"
代码语言:r
复制
df1[,c('gene','change')]
代码语言:r
复制
##    gene change
## 1 gene1     up
## 2 gene2     up
## 3 gene3   down
## 4 gene4   down
代码语言:r
复制
### 后置的难点,按条件(逻辑值)取子集:1. 根据筛选条件得到逻辑值向量(与被筛选的列向量相对应)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 # 返回逻辑值向量,每个逻辑值对标每行
代码语言:r
复制
## [1]  TRUE  TRUE FALSE FALSE
代码语言:r
复制
df1[k,]# TRUE的行被保留
代码语言:r
复制
##    gene change score
## 1 gene1     up     5
## 2 gene2     up     3
代码语言:r
复制
#筛选score > 0的基因
df1[k,1]
代码语言:r
复制
## [1] "gene1" "gene2"
代码语言:r
复制
df1$gene[k] # 也可以先取基因名列再用逻辑值向量筛选
代码语言:r
复制
## [1] "gene1" "gene2"
代码语言:r
复制
df1$gene[df1$score>0]
代码语言:r
复制
## [1] "gene1" "gene2"

5.数据框修改 有则改之,无则新增

代码语言:r
复制
#改一个格
df1[3,3] <- 5
df1
代码语言:r
复制
##    gene change score
## 1 gene1     up     5
## 2 gene2     up     3
## 3 gene3   down     5
## 4 gene4   down    -4
代码语言:r
复制
#改一整列
df1$score <- c(12,23,50,2)     
df1
代码语言:r
复制
##    gene change score
## 1 gene1     up    12
## 2 gene2     up    23
## 3 gene3   down    50
## 4 gene4   down     2
代码语言:r
复制
#新增一列
df1$p.value <- c(0.01,0.02,0.07,0.05) 
df1
代码语言:r
复制
##    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
代码语言:r
复制
#改行名和列名
rownames(df1) <- c("r1","r2","r3","r4")
#只修改某一行/列的名
colnames(df1)[2] <- "CHANGE" # 修改第二列的列名,就是修改列名这个向量的第二个元素

6.两个数据框的连接 merge

代码语言:r
复制
# 建立要连接的数据框
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), 
                    blood_type = c("A","B","O","AB"))
test1
代码语言:r
复制
##     name blood_type
## 1  jimmy          A
## 2 nicker          B
## 3  Damon          O
## 4 Sophie         AB
代码语言:r
复制
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
代码语言:r
复制
##     name  group vision
## 1  Damon group1    4.2
## 2  jimmy group1    4.3
## 3 nicker group2    4.9
## 4   tony group2    4.5
代码语言:r
复制
test3 <- data.frame(NAME = c('Damon','jimmy','nicker','tony'),
                    weight = c(140,145,110,138))
test3
代码语言:r
复制
##     NAME weight
## 1  Damon    140
## 2  jimmy    145
## 3 nicker    110
## 4   tony    138
代码语言:r
复制
merge(test1,test2,by="name") # 根据指定的列连接
代码语言:r
复制
##     name blood_type  group vision
## 1  Damon          O group1    4.2
## 2  jimmy          A group1    4.3
## 3 nicker          B group2    4.9
代码语言:r
复制
merge(test1,test3,by.x = "name",by.y = "NAME")# 要合并的列名不一致,注意x y的顺序和test的顺序一致
代码语言:r
复制
##     name blood_type weight
## 1  Damon          O    140
## 2  jimmy          A    145
## 3 nicker          B    110

矩阵和列表

代码语言:r
复制
m <- matrix(1:9, nrow = 3) # 创建矩阵
colnames(m) <- c("a","b","c") #加列名
m
代码语言:r
复制
##      a b c
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
代码语言:r
复制
m[2,] # 取子集不支持$
代码语言:r
复制
## a b c 
## 2 5 8
代码语言:r
复制
m[,1]
代码语言:r
复制
## [1] 1 2 3
代码语言:r
复制
m[2,3]
代码语言:r
复制
## c 
## 8
代码语言:r
复制
m[2:3,1:2]
代码语言:r
复制
##      a b
## [1,] 2 5
## [2,] 3 6
代码语言:r
复制
m
代码语言:r
复制
##      a b c
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
代码语言:r
复制
t(m) # 转置
代码语言:r
复制
##   [,1] [,2] [,3]
## a    1    2    3
## b    4    5    6
## c    7    8    9
代码语言:r
复制
as.data.frame(m) # 转换为数据框,注意赋值给新变量
代码语言:r
复制
##   a b c
## 1 1 4 7
## 2 2 5 8
## 3 3 6 9

矩阵画热图

代码语言:r
复制
pheatmap::pheatmap(m) # pheatmap可以接受矩阵也可以接受数据框,heatmap只能接受矩阵,看函数说明

列表

代码语言:r
复制
#列表建立
x <- list(m1 = matrix(1:9, nrow = 3),
          m2 = matrix(2:9, nrow = 2))
x
代码语言:r
复制
## $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
代码语言:r
复制
# 取第一个元素 双中括号或$, 只用一个中括号取出来的是只有一个元素的列表
x[[1]]
代码语言:r
复制
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
代码语言:r
复制
x$m1
代码语言:r
复制
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

补充:元素的名字 并不改变向量的类型

代码语言:r
复制
scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")
scores
代码语言:r
复制
##  jimmy nicker  Damon Sophie   tony 
##    100     59     73     95     45
代码语言:r
复制
scores["jimmy"]
代码语言:r
复制
## jimmy 
##   100
代码语言:r
复制
scores[c("jimmy","nicker")]
代码语言:r
复制
##  jimmy nicker 
##    100     59
代码语言:r
复制
names(scores)[scores>60]
代码语言:r
复制
## [1] "jimmy"  "Damon"  "Sophie"

删除变量

代码语言:r
复制
rm(x)
rm(df1,df2)
代码语言:r
复制
rm(list = ls())
# 清空控制台 快捷键ctrl+L

数据结构的总结

引用自生信技能树

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作业讲解
  • 课堂内容
  • 重点:数据框
    • 1.数据框来源
      • 2.新建和读取数据框
        • 3.数据框属性
          • 4.数据框取子集,注意按逻辑值取子集的难点
            • 5.数据框修改 有则改之,无则新增
              • 6.两个数据框的连接 merge
              • 矩阵和列表
                • 矩阵画热图
                  • 列表
                    • 补充:元素的名字 并不改变向量的类型
                      • 删除变量
                      • 数据结构的总结
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档