2017-07-06 50 views
0

我有下面這個問題來解決。您的輸入/指針非常感謝。提前感謝!R中有多個條件的隨機數生成

我有一個data.table稱爲缺陷。和第一列是長度

Defect Table : 

Length 

6355 
6236 
1345 
3123 

我想補充兩列名爲DefectStarts和DefectEnds。我想用隨機函數來確定缺陷的起點和結束位置。

基本標準如下:

DefectStarts and DefectEnds <= Length 

DefectEnds > DefectStarts 

DefectEnds - DefectStarts <= Length 

最終數據應該是這樣的(值可能是不同的,只要它滿足上述條件)

Defect table: 

Length  DefectStarts  DefectEnds 

6355   1234    4356 

6236   2000    4567 

1345   500    689 

3123   342    3120 
+1

什麼意思是隨機函數? – amonk

+1

我很抱歉,我的想法是在R中使用一個函數,該函數生成滿足這些條件的隨機值。我不確定R中調用的函數是什麼。 – Pree

+0

R中的一個隨機函數可能是'runif(N)',N代表您希望擁有的僞隨機數的個數。 – amonk

回答

2

runif(n, min, max)生成與從minmax範圍n隨機數。後兩個參數可以是向量。

n <- nrow(df) 
df$start <- runif(n, max=df$Length) 
df$end <- runif(n, min=df$start, max=df$Length) 

使用dplyr包:

df <- mutate(df, start=runif(n(), max=Length), end=runif(n(), min=start, max=Length)) 
0

考慮df是你的數據幀:

df$random<-runif(nrow(df)) #just create a random column and fill it with random numbers 

適用條件

df$random<-ifelse(df$DefectEnds > df$DefectStarts,df$random,NA)#select rows with this condition 
0

僞碼:

i for (1 to length(df){ 
    df[i,DefectStarts]=sample(df[i,Length],1,T) 
    df[i,DefectEnds]=sample(df[i,Length]-df[i,DefectStarts],1,T) 
} 
+0

感謝您對amonk和Ajay的快速評論。 Ajay的回答只使用了第一行,並且僅用該條件填充了整個表格,所以它沒有成功。 Amonk的回答有點過於迂迴,因爲我有超過10,000行的數據 – Pree

+0

ok我改變它做一個循環來確保它只在那一行運行。由於我現在沒有R在辦公室,它是僞代碼 –

0

後,一些與代碼亂搞,這似乎做的工作:

缺陷< - 缺陷[,DefectStarts:= runif(ROW_COUNT最小= 1,最大=缺陷$長度)]

缺陷< - 缺陷[,缺陷結束:= runif(row_count,min =缺陷$缺陷開始,最大=缺陷$ L ength)]

再次感謝您的支持!非常感激。如果有更好的方法可以做,請確實建議。