R语言的综合应用-1

2023-03-15 21:58:02 浏览数 (1)

祝大家今天快乐~

代码语言:javascript复制
安装包
if(!require(stringr))install.packages('stringr')
library(stringr)
代码语言:javascript复制
rm(list = ls())  #清空环境变量
if(!require(stringr))install.packages('stringr')
library(stringr)

一、字符串

代码语言:javascript复制
#1.检测字符串长度
str_length(x)
length(x)  #这是向量的长度  

例如 y=c("nihaoa 11","niyehaoa 22","zhangsongwen 33")

向量:y

字符串:一个引号内的所有东西 “nihaoa 11” 字符:引号内的单个字母/数字/符号

代码语言:javascript复制
x <- "The birch canoe slid on the smooth planks." #这是一个字符串
x
#2.字符串拆分
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)
代码语言:javascript复制
#3.按位置提取字符串
str_sub(x,5,9)
代码语言:javascript复制
#4.字符检测
★str_detect(x2,"h")    #对x2的每个元素进行检测,含有h的返回结果为TRUE,不含有的返回为FALSE。
str_starts(x2,"T")
str_ends(x2,"e")
代码语言:javascript复制
#5.字符串替换
x2
str_replace(x2,"o","A")
str_replace_all(x2,"o","A")
代码语言:javascript复制
# 6.字符删除
x
str_remove(x," ")
str_remove_all(x," ")

二、数据框

代码语言:javascript复制
#1.arrange,数据框按照某一列排序
library(dplyr)
arrange(test, Sepal.Length) #从小到大
arrange(test, desc(Sepal.Length)) #从大到小
代码语言:javascript复制
#2.distinct,数据框按照某一列去重复
distinct(test,Species,.keep_all = T)

类似与unique(给向量去重复)

代码语言:javascript复制
#3.mutate,数据框新增一列
mutate(test, new = Sepal.Length * Sepal.Width)

注意,这样操作结束后,test还是原来的列数,因为没有给新的赋值。在R语言的世界里,没有赋值就是没有发生过。

代码语言:javascript复制
#补充
select()、filter() 筛选列、行
类似于之前的$,[]
代码语言:javascript复制
#管道符号(%>%),表示把前一步的运算结果传递给后一步的函数,不需要多次赋值。
x = iris %>% 
  filter(Sepal.Width>3) %>% 
  select(Sepal.Length,Sepal.Width)%>%
  arrange(Sepal.Length)

三、条件和循环★★ 如果...就...

代码语言:javascript复制
#1
if(){}
if(){}else{}

if(一个逻辑值,不可以是多个逻辑值组成的向量){CODE1}

else

{CODE2}

当(逻辑值是TRUE时),{运行CODE1}

当(逻辑值是FALSE时),{运行CODE2}

代码语言:javascript复制
#2
ifelse函数  
ifelse(x,yes,no)  #ifelse只有3个参数。x为逻辑值或逻辑值向量;yes为逻辑值为TRUE时的返回值;no为逻辑值为FALSE时的返回值
​
例如:
x = rnorm(3)
x
ifelse(x>0," ","-")
代码语言:javascript复制
#3
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")
代码语言:javascript复制
#4 多个条件
i = 0
if (i>0){
  print(' ')
} else if (i==0) {
  print('0')
} else if (i< 0){
  print('-')
}
或者
ifelse(i>0," ",ifelse(i<0,"-","0"))
for循环:对x向量里的每个元素i进行同一操作
代码语言:javascript复制
for(i in x){CODE}
​
例如
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))
}

如何将结果存下来?

代码语言:javascript复制
s = 0
result = list()   #先定义result是一个列表
for(i in 1:length(x)){
  s=s x[[i]]
  result[[i]] = c(x[[i]],s)
}
#每一轮循环下来,result就多了一个元素

0 人点赞