tidyverse
《R数据科学》
1、长、宽调整:gather-spread
2、分、合:separate_unite
3、处理NA
#1 x<data.frame(x1=letters[1:5],x2=1:5) x[2,2]<NA x[4,1]<NA #2 drop_na(x) drop_na(x,x1) drop_na(x,x2) replace_na(x$x2,0) fill(x,x2)
dplyr
基础
1、mutate() 新增列
test=mutate(test,new=Sepal.Lengt*Sepal.Width) test$new=test$Sepal.Length*test$Sepal.Width)
2、select(),按列筛选
3、filter(),按行筛选
4、arrange(),排序
arrange(test,Sepal.Length) arrange(test,desc(Sepal.Length)) #先按照A列排,如果A列相同,按照B列排 arrange(test,desc(Sepal.Width),Sepal.Length)
5、summarise()汇总
进阶
1、count()
2、管道操作%>%(ctrl+shift+M):上一步的输出作为下一步的输入
dplar关系数据
#1 load("test1.Rdata") library(dplar) arrange(deg,P.Value) #2 a=merge(deg,ids,by="probe_id") #inner_join() left_join()
stringr_characters
处理字符串(专用)
x <- "The birch canoe slid on the smooth planks." #检测字符串长度 length(x) str_length(x) #字符串拆分 str_split(x," ") x2 = str_split(x," ")[[1]] #去掉列表的属性,只留下正式的内容 #字符串的组合,collapse表示“标点”,sep表示“连接符号” str_c(x2,collapse = " ") str_c(x2,1234,sep = "+")
y = c("jimmy 150","nicker 140","tony 152") str_split(y," ") str_split(y," ",simplify = T) #simplify=T,简化,转化为形式更为简单的矩阵
#提取字符串的一部分,提取x的第5位到第9位 str_sub(x,5,9) #大小写转化 str_to_upper(x2) #x2每个单词首字母大写 str_to_lower(x2) #x2每个单词首字母小写 str_to_title(x2) #x2首字母大写 #字符串定位 str_locate(x2,"th") str_locate(x2,"h") #字符检测(重点),返回逻辑值 str_detect(x2,"h") str_starts(x2,"T") str_ends(x2,"e") #与sum和mean连用,可以统计匹配的个数和比例,T计为1,F计为0 sum(str_detect(x2,"h")) mean(str_detect(x2,"h")) #提取匹配到的字符串 str_extract(x2,"th|Th") str_extract_all(X2,"o") str_extract_all(X2,"o",simplify=T) #字符删除 str_remove(x,"") #只删除首个单词的空格 str_remove_all(x,"") str_remove_all(x2,"th") #字符串替换 str_replace(x2,"o","A") #若存在两个o则只替换第一个 str_replace_all(X2,"o","A") #结合正则表达式更加强大
#字符检测(重点)
#1.加载stage.Rdata,提取空格后面的内容 str_split(stage," ",simplify = T)[,2] a <- str_sub(stage,10,str_length(stage)) #2.从stage里提取出临床分期的最简单信息,例如I,II,IVA, str_extract_all(a,"I|V|A|B",simplify = T) str_split(a,"T",simplify = T)[,1] b=str_locate(a,"T") str_sub(a,1,b-1)`
条件语句和循环语句
if语句
if后只能是一个逻辑值,不能是逻辑值向量
ifelse
3个参数
ifelse(x,yes,no)
x:逻辑值
yes:逻辑值为TRUE时的返回值
no:逻辑值为FALSE时的返回值
x=read.table("a.txt") b=x$v2 ifelse(str_detect(b,"glioma"),"tumor","normal")
for+while循环
x <- read.csv("group.csv") library(stringr) x1 <- ifelse(str_detect(x$title,"Control"), "control", "treat") load("deg.Rdata") k1 <- deg$a< -1 & deg$b < 0.05 k2 <- deg$a> 1 & deg$b < 0.05 deg$y <- ifelse(k1,"down", ifelse(k2,"up","no")) table(deg$y) count(deg,y)
其他
长脚本管理方式
1、分成多个脚本,每个脚本最后保存Rdata,下一个脚本开头清空再加载
2、if(F){...},则{}里的脚本被跳过
if(T){...},则{}里的脚本被以运行
凡是带有{}的代码,均可以被折叠
apply函数
apply(x,margin,fun,...)
其中x是数据框/矩阵名;margin为1表示取行,2表示取列,fun为函数(对X的每一行/列进行fun函数)
load("test2.Rdata") x <- apply(test,1,sd) load("stage.Rdata") library(stringr) a <- str_split(stage," ",simplify = T)[,2] b <- str_extract_all(a,"I|V|A|B",simplify = T) apply(b,1,str_c,collapse="") #paste0 有问题