Условно меняющиеся ячейки подряд в R - PullRequest
0 голосов
/ 09 марта 2020

Привет, сообщество переполнения стека!

Я застрял на этапе форматирования в R. У меня есть большой набор данных, в котором каждая строка представляет отдельное животное с радиоклаптом, а каждый столбец - это состояние человека на данная дата. Я хочу, чтобы все NA до захвата животного были 0, а все NA после того, как индивидуум умирает, были 4. Между захватом и смертью есть АН, и я хочу, чтобы они остались АН. Смертность обозначена как 4, а захват - как первое число> 0 и <4. </p>

Вот пример данных:

practice.df <- data.frame("200401"=c(NA,NA,1,1),
                          "200402"=c(2,1,NA,4),
                          "200403"=c(1,3,4,NA))

А вот что я m собирается для:

goal.df <- data.frame("200401"=c(0,0,1,1),
                      "200402"=c(2,1,NA,4),
                      "200403"=c(1,3,4,4))

По сути, я хочу утверждение, где R заполняется 0, пока не достигнет числа> 0, затем остановится, а затем заполняется 4 после попадания в ячейку = = 4.

Я просто не очень хорошо разбираюсь в R и не знаю, с чего начать по этой проблеме (если, может быть, еще?) - любой совет будет чрезвычайно полезным!

Спасибо!

1 Ответ

2 голосов
/ 09 марта 2020

Я получил ваш вопрос сейчас:

for(i in seq_len(nrow(practice.df))){
    any.number.occured = F
    four.occured = F
    for(j in seq_len(ncol(practice.df))){
        if(is.na(practice.df[i,j])){ # is an NA
            if(any.number.occured){
                if (four.occured){
                    practice.df[i,j] <- 4
                }
            } else {
                practice.df[i,j] <- 0
            }
        } else { # is a number
            if (practice.df[i,j] == 4) {
                four.occured = T
            }
            any.number.occured = T
        }
    }
}

Вы можете проверить код, я думаю, это само за себя.

...