【发布时间】:2026-02-21 07:10:01
【问题描述】:
这是我作为 data.frame 一部分的布尔值示例:
atest <- c(FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
FALSE)
我想从每个 FALSE 返回一个从 1 开始并增加 1 直到下一个 FALSE 的数字序列。
得到的所需向量是:
[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1
这是完成此操作的代码,但我确信在 R 中有更简单或更优雅的方法来执行此操作。我一直在尝试学习如何在 R 中更有效地编写代码,而不是简单地完成工作.
result <- c()
x <- 1
for(i in 1:length(atest)){
if(atest[i] == FALSE){
result[i] <- 1
x <- 1
}
if(atest[i] != FALSE){
x <- x+1
result[i] <- x
}
}
【问题讨论】:
-
在 for 循环中重新分配(“增长”)一个对象在 R 中是一个很大的禁忌。这是你能做的最慢的事情。
-
我知道我尝试过使用 sapply,但只是想了解基本逻辑。您的解决方案正是我想要的。
标签: r