R绘图

数据挖掘0309

2021-03-10  本文已影响0人  五官端正123

所有资料来源于生信技能树

1. 简介

image.png image.png

1.1 Tidyr

(1)Tidyr的扁与长

gather-spread


image.png
# gather()命令转换说明:
# gather(data=数据框名,key="key名",value="value名",要转换的列1,列2,列3)
> gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", Sample1, Sample2, Sample3)
# 在指定要转换的列时,也可不用列名,直接指定列的编号即可
> gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", 2:4)
#  在指定要转换的列时,也可指定不需转换的列,其他列参与转换
> gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", -GeneId)

(2)Tidyr的分与和

separate-unite


image.png

(3)处理NA

NA赋值 有NA的行都消失
NA行消失后 按照某一列进行删除NA

drop函数比omit函数优势在于可以对某一行进行处理缺失值

NA变成0,然后赋值
填充NA值(用上一行的值)

1.2 dplyr

image.png

(1) mutate()新增列

image.png

新增列后要赋值,数据才会改变

(2)select(),按列筛选,filter()按行筛选

image.png

筛选后要赋值,数据才会改变

(3)arrange()排序

默认是升序 image.png
多列排序

先按照A列从大到小排序(desc),再按照B列从小到大排序(默认为升序)

排序后要赋值,数据才会改变

(4)dplyr关系数据

##处理关系数据:即将2个表进行连接,注意:不要引入factor
options(stringsAsFactors = F)
library(dplyr)
test1 <- data.frame(name = c('jimmy','nicker','doodle'), 
                    blood_type = c("A","B","O"))
test1
test2 <- data.frame(name = c('doodle','jimmy','nicker','tony'),
                    group = c("group1","group1","group2","group2"),
                    vision = c(4.2,4.3,4.9,4.5))
test2 

test3 <- data.frame(NAME = c('doodle','jimmy','lucy','nicker'),
                    weight = c(140,145,110,138))
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")

###1.內连inner_join,取交集,和merge()函数功能一样,区别是inner_join不会改变列的顺序,merge()函数会改变列的顺序,共同列会放在第一列
inner_join(test1, test2, by = "name")
inner_join(test1,test3,by = c("name"="NAME"))#当两个数据集中的列名不一样时使用

###2.左连left_join
left_join(test1, test2, by = 'name')#按照左面的数据集(test1)进行合并

left_join(test2, test1, by = 'name')#按照左面的数据集(test2)进行合并
###3.全连full_join
full_join(test1, test2, by = 'name')

###4.半连接:返回能够与y表匹配的x表所有记录semi_join
semi_join(x = test2, y = test1, by = 'name')

###5.反连接:返回无法与y表匹配的x表的所记录anti_join
anti_join(x = test2, y = test1, by = 'name')

(5)管道操作%>%(ctrl+shift+M)

image.png

(6)count()

image.png

count输出的是数据框格式
table输出的是table格式

CHICKEN SOUP

1.3 stringr包

image.png

• 1.检测字符串长度 str_length(x)
• 2.字符串拆分与组合 str_split( ) /str_c()
• 3.按位置提取字符 str_sub()
• 4.大小写转换 str_to_upper()/str_to_lower()/str_to_title()
• 5.字符串定位 str_locate()
• 6.字符检测 str_detect(x,“h”) –返回逻辑值
• 7.字符提取 str_extract()/ str_extract_all
• 8.字符删除 str_remove()/ str_remove_all()
• 9.字符串替换 str_replace()/str_replace_all()

rm(list = ls())
if(!require(stringr))install.packages('stringr')
library(stringr)

x <- "The birch canoe slid on the smooth planks."

x
###1.检测字符串长度
length(x)
str_length(x)#返回有多少字符

###2.字符串拆分与组合
str_split(x," ")#按照空格拆分,返回的结果类型是列表
class(str_split(x," "))
#[1] "list"
x2 = str_split(x," ")[[1]]

y = c("jimmy 150","nicker 140","tony 152")
str_split(y," ")#输出长度为3的列表,有n个分隔符,长度为n.
str_split(y," ",simplify = T)#简化为T,输出类型为矩阵,而不是列表
class(str_split(y," ",simplify = T))
#[1] "matrix" "array" 
str_c(x2,collapse = " ")
str_c(x2,1234,sep = "+")

###3.提取字符串的一部分
str_sub(x,5,9)

###4.大小写转换
str_to_upper(x2)
str_to_lower(x2)
str_to_title(x2)

###5.字符串定位
str_locate(x2,"th")
str_locate(x2,"h")

###6.字符检测
str_detect(x2,"h")#返回逻辑值,与X2等长,TRUE和FALSE,可以用于取子集
x2[str_detect(x2,"h")]#取结果为TRUE的向量
x2[!str_detect(x2,"h")]#取结果为FALSE的向量

str_starts(x2,"T")
str_ends(x2,"e")

###与sum和mean连用,可以统计匹配的个数和比例
sum(str_detect(x2,"h"))#
mean(str_detect(x2,"h"))

###7.提取匹配到的字符串
str_extract(x2,"th|Th")
str_extract_all(x2,"o")
str_extract_all(x2,"o",simplify = T)

###8.字符删除
str_remove(x," ")
str_remove_all(x," ")
str_remove_all(x2,"th")

###9.字符串替换
str_replace(x2,"o","A")
str_replace_all(x2,"o","A")

###结合正则表达式更加强大

2.循环

image.png

2.1 if...else...

image.png

if后括号里面如果是T的话,执行绿色括号里面的,如果是F的话,执行黑色括号的代码


if.else

2.2 ifelse

ifelse
i =1
ifelse(i>0,"+","-")#对照上图,i>1为x,"此处可以是任何能够返回逻辑值的函数"
#+
image.png

对x进行检查(str_detect函数返回的是T或F),ifelse函数对含有h的向量返回为+,不含h的向量返回为-

2.3For循环

image.png
### 1.for循环
#**顺便看一下next和break**
x <- c(5,6,0,3)
s=0
for (i in x){#用x的值进行循环
  s=s+i
  #if(i == 0) next
  #if (i == 0) break
  print(c(i,s))
}

x <- c(5,6,0,3)
s = 0
for (i in 1:length(x)){#用x的下标(顺序)进行循环
  s=s+x[[i]]
  print(c(x[[i]],s))
}

x <- c(5,6,0,3)
s=0
for (i in x){#用x的值进行循环
  s=s+i
  #if(i == 0) next#i=0时进行下一轮循环,不进行下一步即print这一步
  if (i == 0) break#i=0时退出循环
  print(c(i,s))
}

#如何将结果存下来?
x <- c(5,6,0,3)
s = 0
result = list()#指定result是列表,元素为空
for(i in 1:length(x)){
  s=s+x[[i]]
  result[[i]] = c(x[[i]],s)
}
do.call(cbind,result)#把result(列表)中的元素进行按列组合,形成矩阵
#列表简化成矩阵的函数:do.call(cbind,listname)

2.4 While~慎用!容易烧电脑!哈哈

image.png
变化的逻辑值

2.5 apply族函数

(1)apply


#apply(X, MARGIN, FUN, …) 
#其中X是数据框/矩阵名;
#MARGIN为1表示取行,为2表示取列,FUN是函数
apply
对test的每一列取平均值
对test的每一行求和

FUN可以是自定义的函数,那么apply就成为一个自定义的循环

(2)lapply对列表/向量中的每个元素(向量)实施相同的操作

输出类型为list
(3)sapply 处理列表,简化结果,直接返回矩阵和向量

lapply(test,range)#显示最大值和最小值组成的【列表】
sapply(test,range)#显示最大值和最小值组成的【矩阵】


实战重点函数、知识点复习

image.png
CHICKENSOUP

如果开心你就拍拍手,那不开心呢?就不拍呀!
至于为什么,这很玄学。
大家好像在对着如意金箍棒念咒大大大~

上一篇下一篇

猜你喜欢

热点阅读