2017-07-06 90 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)]

再次感谢您的支持!非常感激。如果有更好的方法可以做,请确实建议。