Я работаю над набором данных, где оценка рассчитывается на основе данных, собранных из истории болезни.В некоторых случаях эти данные были опущены, поэтому оценка не может быть рассчитана и записана как NA.
В некоторых случаях я могу заменить значение NA предыдущим значением.Ограничения для этого подхода:
Если оценка равна NA, проверьте, являются ли предыдущие и следующие значения NA.Если предыдущее и следующее значения не являются NA, введите среднее значение этих оценок.
Если значение равно NA, проверьте, являются ли предыдущие и следующие значения NA.Если только предыдущее значение не равно NA, тогда замените первое значение NA предыдущим значением.
Если в последовательности два или более значений NA, только замените первое значение NA, оставьте другие как NA.
Я попробовал функцию zoo :: na.locf (), но это без разбора либозаменит все NA или ограничит замену Gaps greated, чем количество NA.
Я посмотрел на аккуратную заливку, но в документации не было ничего об установке пределов для заполнения.
Для следующегоdata:
ID,episode,score
1,1,1
1,2,1
1,3,1
1,4,NA
1,5,NA
1,6,NA
1,7,2
1,8,NA
1,9,4
1,10,NA
2,1,NA
2,2,2
2,3,3
2,4,4
2,5,NA
2,6,NA
2,7,3
2,8,NA
2,9,NA
2,10,NA
Так что я думаю, что я на правильном пути с вложенным ifelse mutate, но мне не хватает знаний о функциях, которые я могу использовать, чтобы ограничить замену определенным числом значений NA
data <- data %>%
group_by(ID) %>%
arrange(episode) %>%
mutate(score = ifelse(is.na(score) & lag(!is.na(score)) & lead(!is.na(score)), average(sum(lag(score),lead(score))),
ifelse(is.na(score) & lag(!is.na(score)) & lead(is.na(score)), lag(score), ...) #And this is where I get stuck as I am unsure how to code for NA runs greater than 1
Мой ожидаемый результат будет:
ID,episode,score
1,1,1
1,2,1
1,3,1
1,4,*1
1,5,NA
1,6,NA
1,7,2
1,8,*3
1,9,4
1,10,*4
2,1,NA
2,2,2
2,3,3
2,4,4
2,5,*4
2,6,NA
2,7,3
2,8,*3
2,9,NA
2,10,NA
* с, чтобы было понятно, куда копируются значения.