这是我目前拥有的。我有一个名为“ test1M”的列,其值为0或1。如果值为1,我想将“ test1Mxx”列中的下20个值设置为值1。
如果运行此代码,则会收到错误(if(data(test $ M1x [x] == 1)中的错误){:参数的长度为零)。
对我来说,有什么更好的方法?该代码是非常重复的,因此,如果可能的话,我希望将其最小化。如果有一种方法可以将其转换为更好的功能,那么我可以更改值的数量(例如,以下25个值或40个值等)
for(x in data$test1){
if(data$test1[x]==1){
data$test2[x+1]=1
data$test2[x+2]=1
data$test2[x+3]=1
data$test2[x+4]=1
data$test2[x+5]=1
data$test2[x+6]=1
data$test2[x+7]=1
data$test2[x+8]=1
data$test2[x+9]=1
data$test2[x+10]=1
data$test2[x+11]=1
data$test2[x+12]=1
data$test2[x+13]=1
data$test2[x+14]=1
data$test2[x+15]=1
data$test2[x+16]=1
data$test2[x+17]=1
data$test2[x+18]=1
data$test2[x+19]=1
data$test2[x+20]=1}
}
答案 0 :(得分:1)
您的循环不起作用,因为x
是data$test1
的值,而不是它的索引。您需要类似的东西:
data$test2 <- data$test1
for (x in seq_along(data$test1))
if (data$test1[x] == 1) data$test2[x + 1:20] <- 1