這裏是布爾的樣品我有一個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。
產生的期望矢量:
[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,但只是想獲得基本的邏輯。您的解決方案正是我一直在尋找的。 – tcash21