生成随机数部分原帖地址: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是一个词一个词的拆
网友评论