Если 0 в x нечетно, как присвоить значение id между этим нулем и следующим нулем новой переменной ref - PullRequest
1 голос
/ 09 октября 2019
x<-c(0,0,1,1,0,1,1,1,0,1,1,0,1,1)
aaa<-data.frame(x)
aaa$id<-1:nrow(aaa)

Когда 0 в x нечетно, как присвоить значение id между этим нулем и следующим нулем новой переменной ref.

Результаты типа:

enter image description here

Ответы [ 2 ]

4 голосов
/ 09 октября 2019
aaa$ref <- with(aaa, ifelse(cumsum(x == 0) %% 2, id, NA))

aaa
#    x id ref
# 1  0  1   1
# 2  0  2  NA
# 3  1  3  NA
# 4  1  4  NA
# 5  0  5   5
# 6  1  6   6
# 7  1  7   7
# 8  1  8   8
# 9  0  9  NA
# 10 1 10  NA
# 11 1 11  NA
# 12 0 12  12
# 13 1 13  13
# 14 1 14  14
0 голосов
/ 09 октября 2019

Опция, использующая data.table

library(data.table)
i1 <- setDT(aaa)[, grp := rleid(x)][, .I[seq_len(.N) == .N  & x==0], grp]$V1
i2 <- unlist(lapply(split(i1, as.integer(gl(length(i1), 2, 
          length(i1)))), function(x) head(x[1]:x[2],-1)))
aaa[!i2, ref := id][, grp := NULL][]
#    x id ref
# 1: 0  1   1
# 2: 0  2  NA
# 3: 1  3  NA
# 4: 1  4  NA
# 5: 0  5   5
# 6: 1  6   6
# 7: 1  7   7
# 8: 1  8   8
# 9: 0  9  NA
#10: 1 10  NA
#11: 1 11  NA
#12: 0 12  12
#13: 1 13  13
#14: 1 14  14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...