|
为什么不从向量化的角度考虑这个问题,非要使用for,if之类的指令,感觉是用C的思维学习R。
library(data.table)
# 5类划分
dat = data.table(x = 1:5,y = c(0.001,0.01,0.05,0.1,1),z = c('***','**','*','.',''))
setkey(dat,x)
# 把数据按照类别分组
data = data.table(x = 1:1001,y = seq(0,1,0.001))
data = data[,z := rep(1:5,rle(y%in%dat[,y])$lengths[which(1:length(rle(y%in%dat[,y])$lengths) %% 2 == 1)] + 1)]
setkey(data,z)
data = data[dat]
setkey(data,x)
# 模拟一组数据
yourdata = data.table(x = 1:10,p.vaule = round(abs(rnorm(10)/10),3))
setkey(yourdata,x)
yourdata[data,nomatch=0]
x p.vaule z y y.1 z.1
1: 1 0.062 1 0.000 0.001 ***
2: 2 0.009 1 0.001 0.001 ***
3: 3 0.041 2 0.002 0.010 **
4: 4 0.200 2 0.003 0.010 **
5: 5 0.049 2 0.004 0.010 **
6: 6 0.023 2 0.005 0.010 **
7: 7 0.034 2 0.006 0.010 **
8: 8 0.008 2 0.007 0.010 **
9: 9 0.055 2 0.008 0.010 **
10: 10 0.118 2 0.009 0.010 **
|