2015-10-22 44 views
0

所以基本上我必須從標準正態分佈中得到一個隨機樣本(稱爲x),然後我必須對它進行排序,然後將有序向量放入10第一組包含10個最低等的組。現在,我必須創建一個新的向量,使得按x的順序,y中的值是x的值所在的組編號。即,x中的前3個值分別爲2,5 & 4,那麼y中的前3個值是2,5,4 ... 任何人都可以對我的代碼提供一些幫助,看看我出錯了嗎?R:獲取樣本並將其放入組

x<-rnorm(100, mean=0, sd =1) 
y<-(c(x)) 
datart<-x[order(x)] 
datart 
v1<-datart[1:10] 
v2<-datart[11:20] 
v3<-datart[21:30] 
v4<-datart[31:40] 
v5<-datart[41:50] 
v6<-datart[51:60] 
v7<-datart[61:70] 
v8<-datart[71:80] 
v9<-datart[81:90] 
v10<-datart[91:100] 
for (i in y) 
{ 
    if (i<-v1) print(1) 
    else if (i<-v2) print(2) 
    else if (i<-ve) print(3) 
    else if (i<-v4) print(4) 
    else if (i<-v5) print(5) 
    else if (i<-v6) print(6) 
    else if (i<-v7) print(7) 
    else if (i<-v8) print(8) 
    else if (i<-v9) print(9) 
    else if (i<-v10) print(10) 
} 

回答

0

這裏是一個一行,到適應不同數量的組或不同的組大小。

x <- rnorm(100) 
out <- rep(1:10, each = 10)[order(order(x))] 
2
res <- cut(x, quantile(x, seq(0, 1, 0.1)), 
     labels=paste0("v", 1:10), 
     include.lowest=TRUE) 

table(res) 
#res 
# v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 
# 10 10 10 10 10 10 10 10 10 10 

?cut將分矢量成組。 ?quantile用於創建分組,seq(0, 1, .1)會將分佈劃分爲十進制,如示例中所示。 labels參數允許命名分箱。 include.lowest會將下限設置爲「大於等於」而不是「大於」。

如果您想訪問一組數字作爲輸出有多種選擇(命名爲載體,data.frame,矢量子集),它只是取決於你想接下來做什麼:

我們可以創建一個列表的所有組的分離:

split(x, res) 
# $v1 
# [1] -1.880931 -2.030636 -1.744457 -1.488322 
# [5] -1.235983 -2.436656 -1.604551 -1.380327 
# [9] -1.418812 -1.737736 
# 
# $v2 
# [1] -1.2147030 -0.8343691 -0.8357011 -1.2101051 
# [5] -1.1952688 -0.9705542 -0.8684121 -0.9311926 

數據

set.seed(777) 
x <- rnorm(100) 
相關問題