【发布时间】:2017-12-10 10:30:23
【问题描述】:
我有这个向量:
vector <- c(NA,1,rep(NA,24),1,NA,NA)
[1] NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1 NA NA
基本上我想做的是:
在 excel 中,命令是这样的: 计算点 = E40
=IF(B41=1,1,+E39+1)
在 R 中会是这样的:
ifelse([+1 forward] == 1,1,[-1 behind]+1)
它基本上是一个计数器,当遇到 1 时会重置为 1。
这是所需的输出:
> output
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4
如果我们从元素 1,vector[1] 开始,那么我们将使用 ifelse([+1 forward],1,1 语句查看vector[2]
在这种情况下,这是真的,所以我们放置 1... 接下来我们向上移动一个元素位置。现在我们在位置 2..vector[2]。该语句现在正在寻找 ifelse([+1 forward],1,1 in vector[3],如果它不是 1,则它采用 vector[1] 并添加 +1。接下来的事情......在位置 @ 987654330@,该语句现在正在寻找一个 ifelse([+1 forward],1,1 in vector[4],如果它不是 1,则它采用向量 [2] 并添加一个 +1.. 所以一个正在运行的计数器...最终我们遇到另一个 1,然后计数器将重置为 1...我们再次开始计数...直到下一个 1。
也许有意义?
这是它在 excel 中的工作原理
这是我尝试过的:
vector <- c(NA,1,rep(NA,24),1,NA,NA)
i=1
for( i in 1:length(vector)) {
start <- ifelse(vector[i + 1]==1,1,vector[i - 1]+1)
}
start
【问题讨论】:
-
dplyr::lead和dplyr::lag? -
如果 i lead(vector) 第一个元素消失并在最后加上 NA,当我需要第一个元素保持在位置 1 以便将其添加到正在进行的计算中时。跨度>
-
对不起,我无法真正按照您的示例进行操作?如果您可以更明确地说明您想要的结果,我可能会理解为什么
lead/lag不适合您 -
只是为了让我理解正确,如果输入向量的第二个位置的值是NA或者不是1的值,结果还是一样吗?
-
第 1 位会影响输出。如果有 1,计数器将在其位置放置 1,如果向量元素 == 1,1,否则前一个数字 +1... 所以如果它是 NA,NA,NA,NA,1,NA.. . 它将是 1,2,3,1,2(它的 1,2,3 在位置 4 时作为 ifelse,它在位置 5 中寻找 ifelse 1=1)
标签: r