2017-06-02 32 views
0

我的數據當前設置是這樣的:使用迴路R中添加列

Contract number FA  NAAR  q  
CM300    9746  47000 0.5010 
UL350   80000  0  0.
RAD3421   50000  10000 0.9431 

我想用一個隨機生成的數字(所謂的試行)0-1之間添加一列的每一行,並將此數字與第q列中的值進行比較,如果q <試驗中的另一列指示'l',並且如果q>試驗則'd'。

這是我一次完成此任務的代碼。

trial <- runif(3, min = 0, max = 1) 
data2 <- mutate(data, trial) 
data2 <- mutate(data, qresult = ifelse(data2$q <= data2$trial, 'l', 'd')) 

我的努力是讓這個重複幾次試驗,每次重複都在表上添加新的列。我嘗試了幾種類型的循環,並查看了幾個問題,似乎無法弄清楚。我相當新的R,所以任何幫助,將不勝感激!

+0

您需要添加多少個試驗?您是否希望從所有試驗中創建一份摘要?添加所有必要的列,還是隻是想要執行模擬? – bouncyball

+0

感謝您的反饋。我正在嘗試進行模擬。我想查看哪些行標記爲'd',並計算這些行的總FA和總NAAR字段。我試圖進行很多試驗以瞭解這些值如何變化。有一個更好的方法嗎? – Karly

回答

1

您可能需要使用此接近:

df <- data.frame(contract = c("CM300", "UL350", "RAD3421"), 
       FA = c(9746, 80000, 50000), 
       NAAR = c(47000, 0, 10000), 
       q = c(0.5010, 0., 0.9431)) 

trialmax <- 10 
for(i in 1:trialmax){ 
    trial <- runif(3, min = 0, max = 1) 
    df[ , paste0("trial", i)] <- trial 
    df[ , paste0("qresult", i)] <- ifelse(trial >= df$q, "l", "d") 
    } 

在這裏,我假設你想10次試驗,但你可以改變trialmax到任何你想要的。

+0

謝謝你的幫助!這工作好多了。 – Karly

0

爲了提高效率,我會把事情放在一個單獨的矩陣中,最後只會把它們綁定在一起。實際上,使用矢量回收,可以非常有效地完成:

n_trials = 20 
trials = matrix(runif(n_trials * nrow(data))], ncol = n_trials) 
q_result = matrix(c("l", "d")[(trials > data$q) + 1], ncol = n_trials) 
colNames(trials) = paste0("trial", seq_len(n_trials)) 
colNames(q_result) = paste0("qresult", seq_len(n_trials)) 
data = cbind(data, trials, q_result)