我有一个特定长度的字符向量(不应更改),如下所示:

my.vec <- rep("free", 40000) 

我现在需要做的是:

  • 我需要通过向量循环22来表示年度发展(1循环=1年)
  • 在每个循环中,向量的7个随机元素应从"free"变为"occupied"
  • 在两个"occupied"个元素之间,应该保持至少4个"free"个元素(即"occupied" "free" "free" "free" "free" "occupied"
  • 如果一个元素在一个循环中被指定为"occupied",则不再可用于下一个循环

为了更清楚起见,下面是一个具有短向量和三个时间步长的示例:

# this is the intital vector:
my.vec <- rep("free", 200) 

# this is the assignment in the first three time steps:
# first time step
my.vec[c(1,25,18,10,48,41,33)] <- "occupied"
# second time step
my.vec[c(98,91,81,63,70,163,120)] <- "occupied"
# third time step
my.vec[c(199,127,150,140,172)] <- "occupied"

我希望事情变得明朗起来. 有谁知道如何实现这一点吗?

推荐答案

这将更容易处理索引,然后在最后将"占用"分配到所有选定的位置.(我使用较短的向量、年数和每年的职业进行演示.)

set.seed(13)
my.vec <- rep("free", 50)

# set params 
years <- 3
occ.per.year <- 2
buffer <- 4

# initialize indices
idx.avail <- seq_along(my.vec)
idx.occ <- integer(years * occ.per.year)

for (i in seq_along(idx.occ)) {
  # pick a new element to occupy
  occ.new <- sample(idx.avail, 1)
  idx.occ[[i]] <- occ.new

  # indices within 4 positions of newly occupied 
  # element are no longer available
  unavail <- seq(occ.new - buffer, occ.new + buffer)
  idx.avail <- setdiff(idx.avail, unavail)
}

my.vec[idx.occ] <- "occupied"

结果:

 [1] "free"     "free"     "occupied" "free"     "free"     "free"    
 [7] "free"     "free"     "free"     "free"     "free"     "free"    
[13] "free"     "free"     "free"     "free"     "occupied" "free"    
[19] "free"     "free"     "free"     "free"     "free"     "occupied"
[25] "free"     "free"     "free"     "free"     "occupied" "free"    
[31] "free"     "free"     "free"     "free"     "free"     "occupied"
[37] "free"     "free"     "free"     "free"     "occupied" "free"    
[43] "free"     "free"     "free"     "free"     "free"     "free"    
[49] "free"     "free"    

R相关问答推荐

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

更改Heatmap Annotation对象的名称

无法将传奇添加到cowplot多情节中

名称输出pmap on tible

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

r替换lme S4对象的字符串的一部分

从BRM预测价值

Select 季度月值

`lazy_dt`不支持`dplyr/across`?

仅 Select 超过9行的CSV文件

在R函数中使用加号

为什么我使用geom_density的绘图不能到达x轴?

如何根据数据帧中的值从该数据帧中提取值?

R如何将列名转换为更好的年和月格式

如果条件匹配,则使用Mariate粘贴列名

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

如果满足条件,则替换列的前一个值和后续值

每行不同列上的行求和

按两个条件自动过滤数据

将某个阈值以下的列中的值分类到不同的列中,否则保持该列的原样