从一个区间求特定元素的和(需要模拟)
Find the sum of specific elements from an interval (simulation required)
我想用 for loop/while loop/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 个数字必须是 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]
,...?无需手动计数
这是一个带有 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
我想用 for loop/while loop/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 个数字必须是 total[11]
、total[12]
、total[13]
、total[14]
、total[15]
。那么第 11 个数一定是 total[27]
因为 total[27]
是第一个与 total[11]
.
请问有什么方法可以得到total[1]
、total[2]
、total[3]
、total[4]
和total[5]
的元素之和, total[11]
, total[12]
,...,total[27]
,...?无需手动计数
这是一个带有 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