Нужно проверить столбец в фрейме данных и заменить значения, если они постоянно TRUE (не постоянно TRUE). Ниже приведен пример. lapply не работает, столбец b не изменяется вообще.lapply не работает
a<- c(1,2,3,4,5,1,1,1)
b<- c(TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE)
c<- data.frame(a,b)
index<- which(c$b == TRUE)
lapply(index,function(ind){
c$b[ind + 1]<- ifelse(c$b[ind + 1]==TRUE,FALSE,FALSE)
})
Существует еще один способ сделать это, и он работает хорошо.
trues <- which(c$b)
c$b[c$b == TRUE][c(0, trues[2:length(trues)] - trues[1:length(trues)-1]) == 1] <- FALSE
The correct result is:
> c
a b
1 1 TRUE
2 2 FALSE
3 3 FALSE
4 4 FALSE
5 5 TRUE
6 1 FALSE
7 1 FALSE
8 1 TRUE
Все еще хочет знать, почему lapply не работает! Благодарю.
В качестве альтернативы вы можете использовать 'c $ b [c $ b & c (1, diff (c $ b)) == 0] <- FALSE' например –
Спасибо, это проще! – user1047