生信技能树课程记录笔记(七)20220531

一、数据框排序

法一:sort函数

默认升序。

例:sort(test$Sepal.Length)

法二:order函数

默认升序,返回数据下标组成的数组。

可以给向量排序,也可以给数据框排序

例:test[order(test$Sepal.Length),]  ##升序
test[order(test$Sepal.Length,decreasing = T),]  ##降序

法三:arrange函数

语法优化,实现更加灵活的排序

library(dplyr)
arrange(test, Sepal.Length)  ##升序
arrange(test, desc(Sepal.Length))   ##desc实现降序
arrange(test, desc(Sepal.Width),Sepal.Length)  ##先按Width降序,Width取值相同的数据,按照Length升序排列

注:注意取列名时没有引号也没有$。且这里加引号也不会报错,只是不会排序

二、数据框更改

新增:mutate函数

例:mutate(test,new=xx*yy)

筛选列:select函数

筛选行:filter函数

管道函数:%>%,将处理返回值传递给管道符号后面的函数的第一个参数

例:dat = t(exp) %>%
  as.data.frame() %>%
  rownames_to_column() %>%
  mutate(group = rep(c("control","treat"),each = 3))

三、表达矩阵画箱线图

由于ggplot2处理的数据是一个数据框,横纵坐标是单独的一行/列,所以需要对表达矩阵做处理

例:set.seed(10086) 
exp = matrix(rnorm(18),ncol = 6)
exp = round(exp,2)   ##保留小数点后两位
rownames(exp) = paste0("gene",1:3)
colnames(exp) = paste0("test",1:6)
exp[,1:3] = exp[,1:3]+1
exp

注: ##rnorm取出的值是随机的,每次运行结果都不相同,设置set.seed()可以让随即结果固定,里边的数字随便填

数据处理过程:转置把原来的列变成行

例:

library(tidyr)
library(tibble)
library(dplyr)
dat = t(exp) %>%   ##转置
  as.data.frame() %>%    ##将矩阵转为数据框
  rownames_to_column() %>%    ##将行名变为一列
  mutate(group = rep(c("control","treat"),each = 3))    ##新增一列

pdat = dat%>%   ##宽变长函数
  pivot_longer(cols = starts_with("gene"),   ##gene1,gene2,gene3合并成一列
               names_to = "gene",
               values_to = "count")

四、文件连接

法一:merge()函数

法二:join函数

注:join函数需要加载dplyr包,left_join左连接(以左数据框为模板),right_join右连接(以右数据框为模板)full_join全连接(取并集)inner_join(取交集),没有的值为NA

五、字符串

 1.str_length(x)

返回向量中字符的数目,空格和标点都算一个字符

区别于length(x),如果x为一个向量,则返回值为1

2.str_split(x,"")

按照空格为界,进行拆分

例:str_split(y," ",simplify = T)  ##y是目标向量,simplify将结果转化为数据框

拆分结果为列表,里面有一个元素[[1]]

提取方法:x2 = str_split(x," ")[[1]];x2

3str_sub(x,5,9)

把一个向量从第5位取到第9位

4.str_detect(x2,"h")

检测x2里每个元素是否都含有字母“h”,含有返回TRUE,不含返回FALSE

str_starts(x2,"h")

检测x2里每个元素是否都以字母“h”开头

str_ends(x2,"h")

检测x2里每个元素是否都以字母“h”结尾

5.str_replace(x2,"o","A")

把字符串中的o替换成A,如果该字符串有多个o,只替换第一个

str_replace_all(x2,"o","A")

把字符串中所有的o替换成A

6.str_remove(x," ")

把字符串中的空格删掉,如果该字符串有多个空格,只删除第一个


str_remove_all(x," ")

把字符串中所有的空格删掉

字符改为大写:

toupper(x)

字符改为小写:

tolower(x)

六、条件语句

法一:if(一个逻辑值){ }

 else {}

法二:

if (一个逻辑值){}

else if (一个逻辑值) {}

else if (一个逻辑值) {}

法三:ifelse()函数

ifelse(x,yes,no)

x:逻辑值

yes:逻辑值为TRUE时的返回值

no:逻辑值为FALSE时的返回值

例:ifelse(i>0,"+","-")

如何挑出一个表达矩阵里方差最大的1000个基因?
load("test2.Rdata")
x=names(tail(sort(apply(test,1,var)),1000))
head(x)

七、循环

1.for循环
x <- c(5,6,0,3)
s=0
for (i in x){
  s=s+i
  print(c(i,s))
}  ##元素循环

x <- c(5,6,0,3)
s = 0
for (i in 1:length(x)){
  s=s+x[[i]]
  print(c(x[[i]],s))  ##用俩中括号防止出错
}  ##下标循环

#如何将结果存下来?
s = 0
result = list()
for(i in 1:length(x)){
  s=s+x[[i]]
  result[[i]] = c(x[[i]],s)
}
result
do.call(cbind,result)

##do.call批量处理简化列表

##cbind按列拼接函数

补:长脚本管理方式

1.分成多个脚本,每个脚本最后保存Rdata,下一个脚本开头清空再加载。

2.if (F){...} 则{}里的脚本被跳过

   if (T){...} 则{}里的脚本被执行

凡是带有{}的代码,均可以被折叠

2.隐式循环

(1)apply(X,MARGIN,FUN,...)函数

X是数据框/矩阵名

MARGIN为1表示行,2表示列

FUN是函数,对X的每一行/列进行FUN这个函数

apply(test, 2, mean)

(2)lapply()对列表进行循环的操作,返回列表

(3)sapply()返回向量

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值