07 R进阶

本文详细介绍了使用R语言tidyverse套件中的dplyr包进行数据处理的方法,包括数据的长宽转换、分合、NA处理,以及dplyr的基础和进阶操作,如mutate、select、filter、arrange、summarise等。此外,还讲解了如何利用stringr包处理字符串,涉及提取、替换、定位等操作。同时,文章还涵盖了条件语句和循环语句的应用,并给出了长脚本管理的建议。
摘要由CSDN通过智能技术生成

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 有问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangchuang2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值