前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言day7:函数的高级运用(1)

R语言day7:函数的高级运用(1)

原创
作者头像
不会写代码的医学生
修改2024-03-13 22:43:51
780
修改2024-03-13 22:43:51
举报

专题1:玩转字符串

代码语言:r
复制
rm(list = ls())
if(!require(stringr))install.packages('stringr')
library(stringr)
代码语言:r
复制
x <- "The birch canoe slid on the smooth planks."
x
代码语言:r
复制
## [1] "The birch canoe slid on the smooth planks."
代码语言:r
复制
### 1.检测字符串长度
str_length(x) #一个引号为一个字符串
代码语言:r
复制
## [1] 42
代码语言:r
复制
length(x)
代码语言:r
复制
## [1] 1
代码语言:r
复制
### 2.字符串拆分
str_split(x," ")
代码语言:r
复制
## [[1]]
## [1] "The"     "birch"   "canoe"   "slid"    "on"     
## [6] "the"     "smooth"  "planks."
代码语言:r
复制
class(str_split(x," "))
代码语言:r
复制
## [1] "list"
代码语言:r
复制
x2 = str_split(x," ")[[1]];x2 #列表取子集
代码语言:r
复制
## [1] "The"     "birch"   "canoe"   "slid"    "on"     
## [6] "the"     "smooth"  "planks."
代码语言:r
复制
y = c("jimmy 150","nicker 140","tony 152")
str_split(y," ")
代码语言:r
复制
## [[1]]
## [1] "jimmy" "150"  
## 
## [[2]]
## [1] "nicker" "140"   
## 
## [[3]]
## [1] "tony" "152"
代码语言:r
复制
str_split(y," ",simplify = T) #将拆分结果简化 #返回了一个matrix数据结构
代码语言:r
复制
##      [,1]     [,2] 
## [1,] "jimmy"  "150"
## [2,] "nicker" "140"
## [3,] "tony"   "152"
代码语言:r
复制
#matrix只能有一种数据类型,不能只改其中一列数据类型
#只有数据框可以修改其中一列数据类型
代码语言:r
复制
### 3.按位置提取字符串
str_sub(x,5,9)#从x字符串的第5位到第9位截取
代码语言:r
复制
## [1] "birch"
代码语言:r
复制
### 4.字符检测
str_detect(x2,"h") #哪一个字符含有h
代码语言:r
复制
## [1]  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE
代码语言:r
复制
str_starts(x2,"T") #是否T开头
代码语言:r
复制
## [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
代码语言:r
复制
str_ends(x2,"e") #是否以e结尾
代码语言:r
复制
## [1]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
代码语言:r
复制
### 5.字符串替换
x2
代码语言:r
复制
## [1] "The"     "birch"   "canoe"   "slid"    "on"     
## [6] "the"     "smooth"  "planks."
代码语言:r
复制
str_replace(x2,"o","A") #只替换第一个出现o为A
代码语言:r
复制
## [1] "The"     "birch"   "canAe"   "slid"    "An"     
## [6] "the"     "smAoth"  "planks."
代码语言:r
复制
str_replace_all(x2,"o","A")
代码语言:r
复制
## [1] "The"     "birch"   "canAe"   "slid"    "An"     
## [6] "the"     "smAAth"  "planks."
代码语言:r
复制
str_replace_all(x2,"o|e","A")
代码语言:r
复制
## [1] "The"     "birch"   "canoe"   "slid"    "on"     
## [6] "the"     "smooth"  "planks."
代码语言:r
复制
### 6.字符删除
x
代码语言:r
复制
## [1] "The birch canoe slid on the smooth planks."
代码语言:r
复制
str_remove(x," ") #删除第一个空格
代码语言:r
复制
## [1] "Thebirch canoe slid on the smooth planks."
代码语言:r
复制
str_remove_all(x," ") #删除所有空格
代码语言:r
复制
## [1] "Thebirchcanoeslidonthesmoothplanks."

专题2:玩转数据框

代码语言:r
复制
test <- iris[c(1:2,51:52,101:102),]
rownames(test) =NULL # 去掉行名,NULL是“什么都没有”
test
代码语言:r
复制
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          5.1         3.5          1.4         0.2
## 2          4.9         3.0          1.4         0.2
## 3          7.0         3.2          4.7         1.4
## 4          6.4         3.2          4.5         1.5
## 5          6.3         3.3          6.0         2.5
## 6          5.8         2.7          5.1         1.9
##      Species
## 1     setosa
## 2     setosa
## 3 versicolor
## 4 versicolor
## 5  virginica
## 6  virginica
代码语言:r
复制
# arrange,数据框按照某一列排序

library(dplyr)
arrange(test, Sepal.Length) #根据指定列将所有行从小到大排序
代码语言:r
复制
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          4.9         3.0          1.4         0.2
## 2          5.1         3.5          1.4         0.2
## 3          5.8         2.7          5.1         1.9
## 4          6.3         3.3          6.0         2.5
## 5          6.4         3.2          4.5         1.5
## 6          7.0         3.2          4.7         1.4
##      Species
## 1     setosa
## 2     setosa
## 3  virginica
## 4  virginica
## 5 versicolor
## 6 versicolor
代码语言:r
复制
arrange(test, desc(Sepal.Length)) #从大到小
代码语言:r
复制
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          7.0         3.2          4.7         1.4
## 2          6.4         3.2          4.5         1.5
## 3          6.3         3.3          6.0         2.5
## 4          5.8         2.7          5.1         1.9
## 5          5.1         3.5          1.4         0.2
## 6          4.9         3.0          1.4         0.2
##      Species
## 1 versicolor
## 2 versicolor
## 3  virginica
## 4  virginica
## 5     setosa
## 6     setosa
代码语言:r
复制
# distinct,数据框按照某一列去重复
distinct(test,Species,.keep_all = T) #留下第一行去掉重复的行
代码语言:r
复制
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          5.1         3.5          1.4         0.2
## 2          7.0         3.2          4.7         1.4
## 3          6.3         3.3          6.0         2.5
##      Species
## 1     setosa
## 2 versicolor
## 3  virginica
代码语言:r
复制
# mutate,数据框新增一列
mutate(test, new = Sepal.Length * Sepal.Width)
代码语言:r
复制
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          5.1         3.5          1.4         0.2
## 2          4.9         3.0          1.4         0.2
## 3          7.0         3.2          4.7         1.4
## 4          6.4         3.2          4.5         1.5
## 5          6.3         3.3          6.0         2.5
## 6          5.8         2.7          5.1         1.9
##      Species   new
## 1     setosa 17.85
## 2     setosa 14.70
## 3 versicolor 22.40
## 4 versicolor 20.48
## 5  virginica 20.79
## 6  virginica 15.66
代码语言:r
复制
#运行这句代码test需要赋值
代码语言:r
复制
# 连续的步骤

# 1.多次赋值,产生多个中间的变量
x1 = select(iris,-5)
x2 = as.matrix(x1)
x3 = head(x2,50) #取前50行
pheatmap::pheatmap(x3)
代码语言:r
复制
# 2. 嵌套,代码不易读
pheatmap::pheatmap(head(as.matrix(select(iris,-5)),50))
代码语言:r
复制
# 3.管道符号传递,简洁明了
iris %>% #%>% #cmd+shift+m
  select(-5) %>%
  as.matrix() %>%
  head(50) %>% 
  pheatmap::pheatmap()

专题3:条件和循环

代码语言:r
复制
rm(list = ls())

一.条件语句

1.if(){ }

(1)只有if没有else,那么条件是FALSE时就什么都不做
代码语言:r
复制
i = -1
if (i<0) print('up')
代码语言:r
复制
## [1] "up"
代码语言:r
复制
if (i>0) print('up')

#理解下面代码
if(!require(tidyr)) install.packages('tidyr')
#读取下一级文件夹里的文件 read.csv(xiaolizhenbang/x.csv)
#读取上一级read.csv(../dalizhenbang/x.csv)
(2)有else
代码语言:r
复制
i =1
if (i>0){ #()一个逻辑值
  print('+')
} else {
  print("-")
}
代码语言:r
复制
## [1] "+"
代码语言:r
复制
i = 1
ifelse(i>0,"+","-")
代码语言:r
复制
## [1] "+"
代码语言:r
复制
x = rnorm(3)
x
代码语言:r
复制
## [1] -0.9283129 -0.1291495 -0.7929700
代码语言:r
复制
ifelse(x>0,"+","-")
代码语言:r
复制
## [1] "-" "-" "-"

ifelse()+str_detect(),王炸

代码语言:r
复制
samples = c("tumor1","tumor2","tumor3","normal1","normal2","normal3")
k1 = str_detect(samples,"tumor");k1
代码语言:r
复制
## [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE
代码语言:r
复制
ifelse(k1,"tumor","normal")
代码语言:r
复制
## [1] "tumor"  "tumor"  "tumor"  "normal" "normal" "normal"
代码语言:r
复制
k2 = str_detect(samples,"normal");k2
代码语言:r
复制
## [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE
代码语言:r
复制
ifelse(k2,"normal","tumor")
代码语言:r
复制
## [1] "tumor"  "tumor"  "tumor"  "normal" "normal" "normal"
(3)多个条件
代码语言:r
复制
i = 0
if (i>0){
  print('+')
} else if (i==0) {
  print('0')
} else if (i< 0){
  print('-')
}
代码语言:r
复制
## [1] "0"
代码语言:r
复制
ifelse(i>0,"+",ifelse(i<0,"-","0"))
代码语言:r
复制
## [1] "0"

二、for循环

代码语言:r
复制
for( i in 1:4){
  print(i)
}
代码语言:r
复制
## [1] 1
## [1] 2
## [1] 3
## [1] 4
代码语言:r
复制
#批量画图
par(mfrow = c(2,2))
for(i in 1:4){
  plot(iris[,i],col = iris[,5])
}
代码语言:r
复制
#批量装包
pks = c("tidyr","dplyr","stringr")
for(g in pks){
  if(!require(g,character.only = T))
    install.packages(g,ask = F,update = F)
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 专题1:玩转字符串
  • 专题2:玩转数据框
  • 专题3:条件和循环
    • 一.条件语句
      • 1.if(){ }
  • ifelse()+str_detect(),王炸
    • 二、for循环
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档