祝大家今天快乐~
代码语言: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就多了一个元素