从今天起试一试先听课之后再跟着课件整理笔记的方法~
区分字符型向量/字符串/字符
y = c("jimmy 150","nicker 140","tony 152")
y:字符型向量
"jimmy 150":字符串,一个引号内的所有东西
引号内的单个字母/数字/符号称为字符
x <- "The birch canoe slid on the smooth planks."
x
str_length(x)
length(x)
有分隔符号的拆分
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)
simplify = T
简化
str_sub(x,5,9)
提取x中的第五个——第九个字符
返回逻辑值
str_detect(x2,"h")
str_starts(x2,"T")
str_ends(x2,"e")
x2
str_replace(x2,"o","A")
str_replace_all(x2,"o","A")
x
str_remove(x," ")
str_remove_all(x," ")
使用内置数据iris建立新的数据框test
test <- iris[c(1:2,51:52,101:102),]
rownames(test) =NULL # 去掉行名,NULL是“什么都没有”
test
library(dplyr)
arrange(test, Sepal.Length) #从小到大
arrange(test, desc(Sepal.Length))
distinct(test,Species,.keep_all = T)
distinct(test,Species)
mutate(test, new = Sepal.Length * Sepal.Width)
⭐只是在控制台上对数据框test进行了一些操作,实际上的test还是只有5列!
没有赋值就没有发生过!
x1 = filter(iris,Sepal.Width>3)
x2 = select(x1, Sepal.Length,Sepal.Width)
x3 = arrange(x2,Sepal.Length)
x1 x2为中间变量,无其他用途
管道符号:%>%传递,简洁明了
把前一步的运算结果传递给下一步的函数,作为这个函数的第一个参数
x = iris %>%
filter(Sepal.Width>3) %>%
select(Sepal.Length,Sepal.Width)%>%
arrange(Sepal.Length)
这里只介绍if条件语句和for循环语句
看懂代码在干什么即可!
如果……就……
if(一个逻辑值,不可以是逻辑值组成的向量){ }
TRUE 执行
FALSE 不执行
如果……就……否则……
if(一个逻辑值,不可以是逻辑值组成的向量){ }else{ }
ifelse(x,yes,no)
x:逻辑值或者逻辑值向量
yes:逻辑值为TRUE时的返回值
no:逻辑值为FALSE时的返回值
ifelse函数支持单个逻辑值,也支持多个逻辑值组成的向量
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")
ifelse()
可以满足多个条件的嵌套
i = 0
if (i>0){
print('+')
} else if (i==0) {
print('0')
} else if (i< 0){
print('-')
}
ifelse(i>0,"+",ifelse(i<0,"-","0"))
对x里的每一个元素i进行同一个操作
for(i in x){ }
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))
}
m=list()
m[[1]]=iris[1:50,]
m[[2]]=iris[51:100,] #列表新建的另一种方式
m0=list(iris[1:50,],iris[51:100,])
identical(m,m0)
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) #把result的结果简化,按列拼接成为一个矩阵 do.call完成批量操作
基因表达的数据通常使用表达矩阵来表示
其中矩阵的行代表某个基因在不同样本(不同处理,或时间点等)中的表达水平
列表示某个样本中各个基因的表达水平
#tidyverse系列不认矩阵 矩阵转换为数据框
library(tidyr)
library(tibble)
library(dplyr)
dat = t(exp) %>% #t()转置
as.data.frame() %>%
rownames_to_column() %>% #行名变为第一列
mutate(group = rep(c("control","treat"),each = 3)) #数据框新增一列
#变形的函数 完成宽数据变长数据的操作
pdat = dat%>%
**pivot_longer**(cols = starts_with("gene"),#需要合并的列
names_to = "gene",
values_to = "count")
#使用ggplot画图
library(ggplot2)
p = ggplot(pdat,aes(gene,count))+
geom_boxplot(aes(fill = group))+
theme_bw()
添加分面
p + facet_wrap(~gene,scales = "free")
apply(X,MARGIN,FUN…)
X:数据框/矩阵名称
MARGIN:取值=1表示行;取值=2表示列
FUN:具体函数
对X的每一行/每一列进行FUN这个函数
test<- iris[1:6,1:4]
apply(test, 2, mean)
apply(test, 1, sum)
test <- list(x = 36:33,y = 32:35,z = 30:27);test
lapply(test,mean)
lapply(test,fivenum)
#sapply 简化结果,返回矩阵或向量
sapply(test,mean)
sapply(test,fivenum)
class(sapply(test,fivenum))
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),
blood_type = c("A","B","O","AB"))
test1
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
library(dplyr)
#五个数据框连接的函数 半连接、反连接基本用不到
inner_join(test1,test2,by="name")
#左连接 左边表里的人都留下 左边说了算
#右连接 右边表里说了算的连接
right_join(test1,test2,by="name")
full_join(test1,test2,by="name")
semi_join(test1,test2,by="name")
anti_join(test1,test2,by="name")
semi_join anti_join实际上没有发生过两个数据框的连接,其实是对左边的数据框取子集
dir() # 列出工作目录下的文件
dir(pattern = ".R$") #列出工作目录下以.R结尾的文件 $表示以……结尾
dir(pattern = ".R")
file.create("douhua.txt") #用代码创建文件
file.exists("douhua.txt") #某文件在工作目录下是否存在
file.remove("douhua.txt") #用代码删除文件
file.exists("douhua.txt") #删掉了就不存在啦
## 可以批量的新建和删除
f = paste0("douhua",1:100,".txt")
file.create(f)
file.remove(f)
1.计算每个基因的方差(每个基因是每一行,方差var)
2.每个基因方差排列
3.最后1000个数字所对应的基因
load("test2.Rdata")
##里面保存的数据框名字是test
dim(test)
apply(test, 1, var)
##计算数据框test每一个基因的方差
sort(apply(test, 1, var))
##从小到大排序,最大的1000应在最后面
tail(sort(apply(test, 1, var)),1000)
##用**tail函数**(从后面开始取)取最后1000个方差最大的基因,默认参数是6不写,这里是1000,写上
names(tail(sort(apply(test, 1, var)),1000))
#提取**元素名称**,挑出1000个基因名字
以上内容是生信技能树小洁老师课程笔记,请结合食用~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。