从区间中查找特定元素的总和(需要模拟)
Posted
技术标签:
【中文标题】从区间中查找特定元素的总和(需要模拟)【英文标题】:Find the sum of specific elements from an interval (simulation required) 【发布时间】:2021-12-27 10:02:37 【问题描述】:我想使用 for 循环/while 循环/ifelse(或任何其他方法)进行一些模拟,以获取特定区间的元素总数。如果您能帮助我,请提前感谢您!我一直在为这个问题苦苦挣扎!
第二组五个数的元素和第一组五个数的元素之间的差必须大于1,那么第三组的元素的差也必须大于1五个数字和第二组五个数字的元素,以此类推为以下五个数字组
获取区间的代码:
set.seed(50)
a=sort(runif(10,0,1))
b=sort(runif(30,1,4))
total=c(a,b)
例如,从图中的区间来看,total[1]
、total[2]
、total[3]
、total[4]
和total[5]
是我的前5个数字,那么我接下来的5个数字必须相差大于一个与前 5 个数字相比。因此,接下来的 5 个数字必须是 total[11]
、total[12]
、total[13]
、total[14]
、total[15]
。那么第 11 个数字必须是 total[27]
,因为 total[27]
是第一个与 total[11]
相比相差超过 1 的元素。
请问有没有办法得到total[1]
、total[2]
、total[3]
、total[4]
和total[5]
、total[11]
、total[12]
、... ,total[27]
,....?无需手动计数
【问题讨论】:
您写道,数字之间的差必须大于 1,但第 5 个数字总共是 0.43765986,第 11 个数字是 1.22237104。差值小于一。还是我错过了什么? 这里可能没有解释清楚。第一组五个数字的第一个元素和第二组 5 个数字的第一个元素的差必须大于 1。所以第一组五个数的第 5 个元素与第二组五个数的第 5 个元素的差必须大于 1。因此,第 5 个数字必须与此处(区间内)的第 15 个元素进行比较,而不是与区间中的第 11 个元素进行比较。第 11 个元素仅与第 1 个元素比较,然后第 12 个元素与第 2 个元素进行比较,依此类推... 我会慢慢消化和学习。谢谢! 【参考方案1】:这是一个带有for()
循环的解决方案。首先,我们创建一个具有所需行数和列数的数据框。然后,在 for 循环中,我们得到一组五个数字,并将它们与最后一组进行比较。在 for 循环之后,我们只保留感兴趣的数据帧行,例如集合相差一个或多个。
n_rows <- length(total)-4
df <- data.frame(ind= rep(NA, n_rows), keep= rep(FALSE, n_rows))
df$ind[1] <- 1; df$keep[1] <- TRUE
last_ind <- 1
for(i in 2:n_rows)
set_i <- total[i:(i+4)]
last_set <- total[last_ind:(last_ind+4)]
df$ind[i] <- i
df$keep[i] <- all(set_i - last_set >= 1)
last_ind <- df$ind[max(which(df$keep))]
df <- df[df$keep, ]
df
ind keep
1 1 TRUE
11 11 TRUE
27 27 TRUE
【讨论】:
以上是关于从区间中查找特定元素的总和(需要模拟)的主要内容,如果未能解决你的问题,请参考以下文章