*R语言基础function

2021-03-23  本文已影响0人  曲凉不见

生成随机数部分原帖地址:https://zhuanlan.zhihu.com/p/72859263

1. 取子集
data=read.table("file.txt",header=T)
data_part1=subset(data,Class=="A"|Class=="B")
data_part2=subset(data,Class=="A"&Group=="B")
2. 初始化一个空矩阵
newdata=matrix(nrow=10,ncol=5)
colnames(newdata)=c("ID","Gene","Group","Class","FPKM")

a=matrix(c(1,2,3,4,5,6,7,8,9,10),nrow=5,ncol=2)
a=  1  6
    2  7
    3  8
    4  9
    5  10

a=c(rep(0,5))
a=0 0 0 0 0
3. for循环
x=1:5
y=3:5
line=0
for (i in 1:5) {
  for (j in 1:3) {
    line=line+1;
    number1=x[i];
    number2=y[j];
    if (number1>number2 | number1<number2) {
      print(c(line,"no",x[i],y[j],"------------"));
    }
    else {
      print(c(line,"yes",x[i],y[j],"------------"));
    }
  }
}
4. T检验
ttest=t.test()
5. 正态分布
df=data$Class
pnorm=pnorm(df,mean(df),sd(df))
6. 合并数据
#merge合并两个数据框,标识共同的列或行
merge(df1,df2,by="Gene")
merge(df1,df2,by.x="ID1",by.y="ID2")

#cbind根据列合并,合并所有列
cbind(df1,df2)

#rbind根据行合并,合并所有行
rbind(df1,df2)

#paste
x=1:10
y=paste("k",x,sep="")
y=k1 k2 k3 ... k10
7. 产生空数组/矩阵
#做一个空矩阵
newmat=matrix(ncol=2,nrow=3)

#做一个空数组
arr=seq(from=0,to=0,length.out=10)
8.基础计算公式
#常规除法
35/10

#取整数
35 %/% 10

#求余数
35 %% 10

#向下取整
floor(2.3)

#向上取整
ceiling(2.3)

#四舍五入取整
round(2.4)
[1] 2
round(2.5)
[1] 3
9.生成随机数/数据
#runif
runif(n,min,max)
随机生成n个在min和max之间的随机数

#:
1:10
1到10的等差序列

#seq
seq(x,y,z)
x=起点,y=终点,z=等间距

seq(from=x,to=y,length=z)
生成长度为z的序列,范围从x到y

#rep
rep(1:3,3)
将1 2 3重复3次,1 2 3 1 2 3 1 2 3

rep(1:3,each=3)
将1 2 3中的每一个重复3次,1 1 1 2 2 2 3 3 3

#factor
x <- c("Man", "Male", "Man", "Lady", "Female")
xf <- factor(x, levels = c("Male", "Man" , "Lady", "Female"),
                 labels = c("Male", "Male", "Female", "Female"))
变成两类标签

#gl
gl(3,5,length=15,label=c('a','b','c'))
a a a a a b b b b b c c c c c
gl(k,n,length=,label=)
构造一个因子序列。k为水平数,n为每个水平连续出现的次数,length为整个序列的长度,label为因子标签

#sample随机取样
sample(x, size, replace = FALSE, prob = NULL)
x被抽样数据;size抽样个数;replace = FALSE/TRUE无重复抽样/重复抽样;prob挑选概率(x与prob对应)

sample(1:100, 20, replace=FALSE)
[1] 71 83 24 75 35 51  9 16 99 39 68 74 85 60 44 98 20  2 87 21

sample(letters, 20, replace=FALSE) #无重复
[1] "e" "a" "l" "c" "r" "h" "s" "z" "i" "d" "j" "g" "o" "f" "n" "y" "b" "t"
[19] "q" "m"

x = c(1:20)
sample(x)#随机排列x

sample(c(0,1), 10, replace=TRUE, prob=c(0.2, 0.8)) 
#分别以0.2和0.8的概率抽取0和1
[1] 1 1 1 1 1 1 1 1 0 0

#strsplit(x) 字符分割
strsplit(x, split, fixed = FALSE, perl = FALSE)
根据split将x分割,若split=“”,则将x分为单个字符
strsplit("split","", fixed = FALSE, perl = FALSE)
[1] "s" "p" "l" "i" "t"
#默认split为正则表达式,可使用fixed=TRUE,对split做精确匹配
#当perl=TRUE时,使用perl的正则表达式规则
#当分隔符为?, +, {, |, (, )时,要使用'\\'来消除特殊含义

x <- "a5aa646a4d9a4da1d3a49d79a41d1da"
strsplit(x, "\\d") #根据每个数字分割

strsplit(x, "[:alnum:]") #任何一个字母或数字(等价于[a-ZA-Z0-9])

#生成拟合概率函数的数据
统一的形式:前缀+分布函数名
d 表示密度函数(density);p 表示分布函数(生成相应分布的累积概率密度函数);q 表示分位数函数,能够返回特定分布的分位数(quantile);r 表示随机函数,生成特定分布的随机数(random)
rnorm(100, mean=0, sd=1) #生成100个服从标准正态分布的序列

以此类推:
rexp(n, rate=1)   #指数
rgamma(n, shape, rate=1, scale=1/rate)   #r 分布
rpois(n, lambda)   #泊松
rt(n, df, ncp)   #t 分布
rf(n, df1, df2, ncp)   #f 分布
rbinom(n, size, prob)   #二项分布
rweibull(n, shape, scale=1)   #weibull 分布
rbata(n, shape1, shape2)   #bata 分布runif(n,min=0,max=1)  #均匀分布

#生成离散随机变量(借助for循环)
p1<-0.15
p2<-0.2
p3<-0.3
p4<-0.35
disrand<-function(i){
  u<-runif(1,0,1)   #生成0-1之间的一个随机数
  if(u<p1) x <- 1 else #如果随机数u小于p1
    if(u<p2+p2) x <- 2 else #如果随机数u大于等于p1且小于p2+p2
      if(u<p3+p2+p1) x <- 3 else
        x <- 4
      return(x) #返回x
      }

Xa <- rep(NA,100) #生成一个有100个NA的向量,用于存放生成的随机数
for (i in 1:100)
  Xa[i] <- disrand(i)
Xa

> Xa
  [1] 1 1 2 3 2 4 1 1 2 4 4 2 2 2 2 4 2 4 4 4 3 2 4 1 1 1 2 4 1 3 1 3 4 2 4 2
 [37] 2 4 4 1 4 3 2 4 3 4 3 3 3 4 4 3 4 2 2 1 4 4 2 1 4 2 4 2 4 1 2 2 1 4 4 3
 [73] 4 4 4 4 4 2 4 1 4 3 4 3 4 1 4 4 4 2 3 4 3 2 3 2 4 4 1 4
10.R语言中正则表达式转义字符
类型 写法 意义
空白元字符 [\b] 回退(并删除)一个字符(backspace)
空白元字符 \f 换页符
空白元字符 \n 换行符
空白元字符 \r 回车符
空白元字符 \t 制表符(tab)
空白元字符 \v 垂直制表符。注:\r\n是windows所用的文本行结束符,Unix和Linux只是用一个换行符来结束一个文本行
匹配数字与非数字 \d 任何一个数字字符,等价于[0-9]
匹配数字与非数字 \D 任何一个非数字字符,等价于^[0-9]
匹配字母\非字母与数字 \w 任何一个字母数字字符(大小写均可以)或下划线字符(等价于[a-zA-Z0-9])
匹配字母\非字母与数字 \W 任何一个非字母数字或下划线字符(等价于[^a-zA-Z0-9])
匹配空白字符 \s 任何一个空白字符(等价于[\f\n\r\t\v])
匹配空白字符 \S 任何一个非空白字符(等价于[^\f\n\r\t\v])
POSIX字符类 [:alnum:] 任何一个字母或数字(等价于[a-ZA-Z0-9])
POSIX字符类 [:alpha:] 任何一个字母(等价于[a-ZA-Z])
POSIX字符类 [:blank:] 空格或制表符(等价于[\t ]) 注:t后面有一个空格
POSIX字符类 [:cntrl:] ASCII控制字符(ASCII 0到31,再加上ASCII 127)
POSIX字符类 [:digit:] 任何一个数字(等价于[0-9])
POSIX字符类 [:graph:] 和[:print:]一样,但不包括空格
POSIX字符类 [:lower:] 任何一个小写字母(等价于[a-z])
POSIX字符类 [:print:] 任何一个可打印字符
POSIX字符类 [:punct:] 既不属于[:alnum:],也不属于[:cntrl:]的任何一个字符
POSIX字符类 [:space:] 任何一个空格字符,包括空格(等价于[f\n\r\t\v ] 注:v后面有一个空格
POSIX字符类 [:upper:] 任何一个大写字母(等价于[A-Z])
POSIX字符类 [:xdigit:] 任何一个十六进制数字(等价于[a-fA-F0-9])
其他 . 可以匹配任何单个的字符字母数字甚至.字符本身。不能匹配换行
其他 "\\" 转义字符,如果要匹配就要写成"\\(\\)"
其他 | 表示可选项,即竖线前后的表达式任选一个
其他 ^ 取非匹配
其他 $ 放在句尾,表示一行字符串的结束
其他 () 提取匹配的字符串,(\s*)表示连续空格的字符串
其他 [] 选择方括号中的任意一个(如[0-2]和[012]完全等价,[Rr]负责匹配字母R和r)
其他 {} 前面的字符或表达式的重复次数。如{5,12}表示重复的次数不能小于5,不能多于12,否则都不匹配
其他 * 匹配零个或任意多个字符或字符集合,也可以没有匹配
其他 + 匹配一个或多个字符,至少匹配一次
其他 ? 匹配零个或一个字符
11. 分割字符
strsplit(字符,要分割的标识,fixed = FALSE, perl = FALSE, useBytes = FALSE)

fixed=F,用正则表达
perl=F,是否用perl的表示方法
useBytes=T,一个字节一个字节的比,F是一个词一个词的拆

上一篇下一篇

猜你喜欢

热点阅读