前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >阿榜的生信笔记7—R语言的综合运用1

阿榜的生信笔记7—R语言的综合运用1

原创
作者头像
用户10480134
修改2023-05-04 23:39:19
6320
修改2023-05-04 23:39:19
举报
文章被收录于专栏:黄金榜黄金榜

哈喽,我是学习生物信息学的阿榜!非常感谢您能够点击进来查看我的笔记。我致力于通过笔记,将生物信息学知识分享给更多的人。如果有任何纰漏或谬误,欢迎指正。让我们一起加油,一起学习进步鸭?

这份学习目录可以让大家更容易地了解笔记里面的内容哦?:

R语言的综合运用内容较多,所以我将其分为两篇文章进行讲解。第一篇笔记先学习目录的前三个知识✊

一、玩转字符串

字符串的学习要点在下方:

1、字符串长度

先上图,大家会不会觉得疑惑?这好像不是我想的答案

代码语言:text
复制
rm(list = ls())
if(!require(stringr))install.packages('stringr')
library(stringr)

x <- "The birch canoe slid on the smooth planks."
x
### 1.检测字符串长度
str_length(x)
length(x)

如果和你想的答案不一样,那说明你有些概念没有弄清楚:

看完上幅图的概念后,你是不是明白了?对的,str_length(x)得到的是字符串的长度,它包括了“”内的所有东西,包括空格哦。

2、字符串拼写

那有人会问我不想包括空格,想要单词的长度,怎么办?

代码语言:text
复制
### 2.字符串拆分
str_split(x," ")
x2 = str_split(x," ")[[1]];x2

y = c("jimmy 150","nicker 140","tony 152")
str_split(y," ")
str_split(y," ",simplify = T)

str_split(x,“ ”)将字符串x分割成以空格为分隔符的子字符串数组。

2 = str_split(x," ")[1];x2,这段代码将字符串 x 以空格为分隔符分成多个部分,并将第一个部分赋值给变量 x2。然后将 x2 的值返回。

str_split(y," ",simplify = T)这段代码是用于将字符串 y 按空格进行分割,参数 simplify 设置为 T 表示结果直接返回成为一个数组。

3、str_sub():按位置提取字符串

代码语言:text
复制
### 3.按位置提取字符串
str_sub(x,5,9)

4、字符检测

代码语言:text
复制
### 4.字符检测
str_detect(x2,"h")
str_starts(x2,"T")
str_ends(x2,"e")

str_detect函数检查x2字符串中是否包含字母"h",返回一个逻辑值。

str_starts函数检查x2字符串是否以字母"T"开头,返回一个逻辑值。

str_ends函数检查x2字符串是否以字母"e"结尾,返回一个逻辑值。

5、字符替换

代码语言:text
复制
### 5.字符串替换
x2
str_replace(x2,"o","A")
str_replace_all(x2,"o","A")

"str_replace(x2,"o","A")" 该代码表示将字符串x2中的第一个字母o替换为A。

"str_replace_all(x2,"o","A")" 该代码表示将字符串x2中所有的字母o都替换为A。

6、字符删除

代码语言:text
复制
### 6.字符删除
x
str_remove(x," ")
str_remove_all(x," ")

str_remove(x," ")从字符串x中删除一个空格。

str_remove_all(x," ")从字符串x中删除所有空格。

字符串学完啦?

知识点记忆卡片来喽,帮助大家梳理知识点和记忆:

二、玩转数据框

1、arrange()排序

代码语言:text
复制
test <- iris[c(1:2,51:52,101:102),]
rownames(test) =NULL # 去掉行名,NULL是“什么都没有”
test

# arrange,数据框按照某一列排序

library(dplyr)
arrange(test, Sepal.Length) #从小到大
arrange(test, desc(Sepal.Length)) #从大到小

arrange(test, Sepal.Length) :按照"Sepal.Length"这个变量的值对"test"数组进行从小到大排序。

arrange(test, desc(Sepal.Length)) :按照"Sepal.Length"这个变量的值对"test"数组进行从大到小排序。

2、distinct()去重复

代码语言:text
复制
# distinct,数据框按照某一列去重复
distinct(test,Species,.keep_all = T)

distinct(test,Species,.keep_all = T),这行代码是用来从数据框test中筛选出不重复的Species列,并保留所有列数据。其中的参数“.keep_all = T”表示保留所有列,而不仅仅是Species列。

3、mutate():数据框新增列

提个小问题:运行完这句代码“test=mutate(test, new = Sepal.Length * Sepal.Width)”后、test这个数据是5列还是6列?为什么?

代码语言:text
复制
# mutate,数据框新增一列
test=mutate(test, new = Sepal.Length * Sepal.Width)

mutate(test, new = Sepal.Length * Sepal.Width):这段代码使用了mutate函数,将test数据集中新增一个名为new的列,该列的值为Sepal.Length×Sepal.Width。

答案:6列,代码运行的结果赋值给test了

所以经典名言第三次出现了,大家熟记于心?

4、补充两个知识点:select()函数是用于从数据框(data.frame)或数据集(dataset)中选择特定的列。

filter()函数是用于从数据框(data.frame)或数据集(dataset)中筛选出符合特定条件的行。

5、函数的运用

代码语言:text
复制
# 连续的步骤

# 1.多次赋值,产生多个中间的变量
x1 = select(iris,-5)
x2 = as.matrix(x1)
x3 = head(x2,50)
pheatmap::pheatmap(x3)

# 2. 嵌套,代码不易读
pheatmap::pheatmap(head(as.matrix(select(iris,-5)),50))

# 3.管道符号传递,简洁明了
iris %>%
  select(-5) %>%
  as.matrix() %>%
  head(50) %>% 
  pheatmap::pheatmap()

上面的三种代码运行的结果是一样的,我仔细解释第一种代码:x1 = select(iris,-5)、x2 = as.matrix(x1)、x3 = head(x2,50)、pheatmap::pheatmap(x3):这段代码首先通过select函数从iris数据集中选择了除了第5列(即最后一列)之外的所有列,然后将结果转换成矩阵(as.matrix),接着再选出前50行(head函数),最后使用pheatmap包中的pheatmap函数绘制热图。

①、多次赋值,产生多个中间的变量

②、嵌套,代码不易读

③、管道符号传递,简洁明了

三、条件语句和循环语句

1、if条件语句:满足()里面的条件,执行;不满足()里面的条件,不执行

②、长脚本管理的两种方法

长脚本可以进行折叠,if条件语句简洁了?

③、if条件语句的进阶

原理:

④、ifelse函数

原理如图所示:简单直接

下面这张图是运用到生信的数据清洗,很重要,大家用心去理会吧?

⑤、多个条件运用

代码语言:text
复制
rm(list = ls())

## 一.条件语句

###1.if(){ }

#### (1)只有if没有else,那么条件是FALSE时就什么都不做

i = -1
if (i<0) print('up')
if (i>0) print('up')

#理解下面代码
if(!require(tidyr)) install.packages('tidyr')

#### (2)有else
i =1
if (i>0){
  print('+')
} else {
  print("-")
}
i = 1
ifelse(i>0,"+","-")

x = rnorm(3)
x
ifelse(x>0,"+","-")

#ifelse()+str_detect(),王炸
samples = c("tumor1","tumor2","tumor3","normal1","normal2","normal3")
k1 = str_detect(samples,"tumor");k1
ifelse(k1,"tumor","normal")
k2 = str_detect(samples,"normal");k2
ifelse(k2,"normal","tumor")

#### (3)多个条件
i = 0
if (i>0){
  print('+')
} else if (i==0) {
  print('0')
} else if (i< 0){
  print('-')
}

ifelse(i>0,"+",ifelse(i<0,"-","0"))

⑥、for循环

for循环可以机械重复操作符合同一条件的数据,下面列举了三个例子:

代码语言:text
复制
## 二、for循环

for( i in 1:4){
  print(paste0("the current number is ",i))
}

#批量画图
par(mfrow = c(2,2))
for(i in 1:4){
  print(paste0("the current column is ",colnames(iris)[i]))
  plot(iris[,i],col = iris[,5])
}
#批量装包
pks = c("tidyr","dplyr","stringr")
for(g in pks){
  print(paste0("package ",g," is installing"))
  if(!require(g,character.only = T))
    install.packages(g,ask = F,update = F)
}

以上是我这次在学习生物信息学过程中所整理的笔记。希望大家能够一起学习,共同进步。如果在笔记中有错误或者不足之处,欢迎大家指正,我们一起加油鸭?

引用自生信技能树——小洁老师

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云原生分布式云中心
云原生分布式云中心(Tencent Kubernetes Engine Distributed Cloud Center, TDCC)是面向多云多集群场景的应用管理平台,支持将云原生化的应用扩展到分布式云,全局视角统一管理和运维分布式云资源,轻松地将您的业务发布至全球,一次部署处处运行。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档