2015-08-26 112 views
0

我需要幫助編碼以下內容:我想從「s」的第一列中隨機採樣值並添加這些值,直到它們的總和等於第一,第二等行的第一列「dat」的行,從「s」的SECOND列中隨機採樣值並添加這些值,直到它們的總和等於「dat」的SECOND列的第一,第二等行,重複此操作處理所有6列。最終輸出應該與dat的結構匹配,並且包含滿足「dat」中每個單元的標準的「s」的行數。一個數據集的總行數滿足R中其他數據集的條件

這是我想要的一個近似值 - 通過代碼只對第一列「dat」的單個單元格和第一個「s」的第一列,因爲我無法索引「s」和「DAT」。

set.seed(1234) 
dat<-matrix(rnorm(30, 50, 10), ncol=5) 
dat<-as.data.frame(round(dat)) 
dat.V1<-dat[,1] 
s<-matrix(rnorm(60, 7, 2), ncol=5) 
s<-as.data.frame(s) 
s.V1<-s[,1] 

total <- 0 
result <- 0 
    while (result<= dat.V1[1]) { 
    result_ind = sum(result + s.V1[sample(s.V1, 1)])- result 
    result  = result + s.V1[sample(s.V1, 1)] 
    total  = total + 1 
    if(result == dat.V1[1]) break 
    } 

allout<-cbind(dat.V1[1], result, total) 
allout 
     result total 
[1,] 38 41.47509  7 

這裏dat.V1 [1] = 38,隨機值從s.V1總和= 41.47509(我想要的值s.V1≈dat.V1 [1],但足夠接近)中,用滿足該單元的標準的s.V1 = 7的計數。提前感謝!

+1

請將'set.seed(1234)'添加到您的代碼中。隨機數字的產生是最好的做法,添加這段代碼,以使數字可重現。 – SabDeM

+0

我很困惑你的情況意味着什麼。例如總和相等的概率爲0. – MichaelChirico

+0

如果'cumsum'從不> =您的閾值之一,該怎麼辦? –

回答

0

這裏是一個解決方案,該解決方案生成具有cumsum(S_i)> =閾值V_n,m的min(索引S_i) 的值矩陣。 0表示V_n,m> cumsum(S_i)。我已經修改瞭解決方案,以便每次將它與V_n,m進行比較時隨機化S_i的順序。

dat <-matrix(rnorm(30, 50, 20), ncol=5) 
dat <-as.data.frame(round(dat)) 
s  <-matrix(rnorm(60, 7, 2), ncol=5) 
s  <-as.data.frame(s) 

findIndex <- function(c1,tv){ 
    index <- min(which(c1>=tv)) 
    index <- ifelse(index<Inf,index, 0) 
    return(index) 
} 

processS <- function(s,v2){ 
# returns the first index of s[n] that has a cumsum >= 
# threshold hold value v2[n,m] or 0 if v2[n,m] > cumsum 
    counts <- matrix(nrow = nrow(dat), ncol=ncol(dat)) 
    for (c in 1:ncol(dat)){ 
     for (r in 1:nrow(dat)){ 
      s_samp <- apply(s, 2, sample) 
      counts[r,c] <- findIndex(cumsum(s_samp[,c]),dat[r,c]) 
     } 
    } 
    return(counts) 
} 

processS(s,dat) 
+0

這很棒@ShawnMehan。快速提問/澄清。據我所知,cumsum從S的開頭開始累加連續值,直到滿足閾值,這意味着所有計數都將是相同行的cumsum,直到達到閾值,是正確的。但是,我想要S的隨機樣本的cumsum滿足閾值。那有意義嗎?。非常感謝! – ACBe

+0

@ACBe,'sample'可能就是你想要的,但是你只需要計算一組給定的隨機元素有多少個> = tv?如果進入'findIndex(cumsum')之前'隨機化'這個命令會更容易,我現在不明白你想要達到什麼目標,所以我覺得在這個時候你無法提前解決你的問題,tbh。 –

+0

道歉我缺乏清晰度。我編輯了上面的帖子,希望能夠更好地解釋我的問題。再次感謝! – ACBe

相關問題