首页 > 解决方案 > 对于 r 中的循环问题:if (length[i] == 1) { 中的错误:需要 TRUE/FALSE 的缺失值

问题描述

ann <- 1:2500
len <- sample(1:3,1000,replace=TRUE)
df <- data.frame(col1= c(1:2500),col2= c(1:2500))

for (i in 1:length(ann)) {
      if (length[i]==1) { 
            df$col1[i] <- len[i] }
      else if (length[i]==2) { 
            df$col1[i] <- len[i] 
            df$col1[i+1] <- len[i] }
      else if (length[i]==3) {  
            df$col1[i] <- len[i]
            df$col1[i+1] <- len[i]
            df$col1[i+2] <- len[i] }
}

试图使 2 的每个实例在下一行以数字 2 重复。此外,如果有 3,我希望这之后的两行具有数字 3。谢谢!我需要练习 for 循环。

Error in if (length[i] == 1) { : missing value where TRUE/FALSE needed

更新: for 循环将用以下数字替换每个重复的行,我需要知道如何在每个 2 实例之后生成 i+1,在每个 3 实例之后生成 i+2。

标签: rloopsfor-loopif-statement

解决方案


在这里,我们可以遍历 的所有元素len,并为每个执行一个内部循环,该循环获取该元素len并将其输入到 的那么多行中df$col1

df_row <- 1
for (i in 1:length(len)) {
  for (j in 1:len[i]) {
    df[df_row, 1] = len[i]
    df_row <- df_row + 1
  }
}

推荐阅读