【发布时间】:2019-09-14 02:54:04
【问题描述】:
len1 <- sample(1:2,100,replace=TRUE)
df <- data.frame(col1= c(1:200),col2= c(1:200))
for (i in 1:length(len1)) {
if (len1[i]==1) {
df$col1[i] <- len1[i] }
else if (len1[i]==2) {
df$col1[i] <- len1[i]
df$col1[i+1] <- 2
next
}
}
每次在 len1 列表中出现“2”时,我想在前一行中添加它并跳过下一次迭代 (i+1)。基本上,每次在 len1 列表中出现“2”时,我都会想要 (i+1)。
所需的最终表格将比 len1 样本长,它应该等于 sum(len1)。 我希望它看起来像这样:每 2 后面跟着一个额外的 2。
> df
col1 col2
1 2 1
2 2 2
3 1 3
4 2 4
5 2 5
6 1 6
有什么建议吗?谢谢!
【问题讨论】:
-
很难理解您的输出,因为您没有将
seed用于len1。我们不知道您的len1实际是什么样子以及如何生成所需的输出。 -
我不明白你所说的种子是什么意思,我认为这是一个可重复的例子。你能更好地描述我的数据集的问题吗?
-
多次运行
sample(1:2,100,replace=TRUE),每次都会得到不同的数字。通过使用set.seed,我们使其可重现。执行set.seed(123)(123 或任何数字)并运行sample(1:2,100,replace=TRUE)。您每次都会得到相同的数字。 -
我现在明白了,这对我来说并不重要,因为我只想要一个 for 循环,当遇到 len1 文件中的 2 时,它将在 i & i+1 行中放置一个 2。发生这种情况时,我想跳过正在进行的 i 值,以免在复制的 2 行中放置 1 值。
-
所以如果
len1是 2 ,将 2 放在i和i + i行中col1或放置 1 ?您还知道len1的长度为 100 而df$col1的长度为 200 ?我希望您现在也了解提供真实可重复示例的重要性。您有 3 个答案(到目前为止),它们都会根据他们对问题的理解给出不同的答案。
标签: r for-loop if-statement next