【发布时间】:2019-09-13 23:21:09
【问题描述】:
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。
【问题讨论】:
-
通过创建一个像这样调用的变量来重载函数
length,当你打算使用函数本身时似乎是一个灾难 -
您不想要吗?
ann <- 1:2500 length <- sample(1:3,1000,replace=TRUE) df <- data.frame(col1= c(1:2500),col2= c(1:2500)) for (i in 1:length(ann)) { if (i==1) { df$col1[i] <- length[i] } else if (i==2) { df$col1[i] <- length[i] df$col1[i+1] <- length[i] } else if (i==3) { df$col1[i] <- length[i] df$col1[i+1] <- length[i] df$col1[i+2] <- length[i] } } -
我希望 2 的每个实例出现两次,即我想要 2 行,其中包含数字 2。并且对于 3 的每个实例显示 3 次,因此 3 行的数字为 3。问题是 for - 循环将在重复的行中粘贴后续数字。
-
你可以考虑使用函数
tidyr::uncount来做这个。 -
由于 R 更专注于矢量化而不是
for循环,因此已经为此目的构建了一个 R 函数:rep(len, times = len)。
标签: r loops for-loop if-statement