Для каждой строки столбца «Ответ» я хотел бы проверить, имеют ли 5 строк ниже его значения «Ответ» (т. Е. Не имеют NA), и если да, то я хотел бы рассчитать среднее и стандартное отклонение из этих 5 строк ниже. Если какая-либо строка в этих 5 строках ниже имеет отсутствующее значение «Response» (то есть NA), тогда конечный результат должен быть «NA» (поскольку я хочу, чтобы средние значения и stdev вычислялись для n = 5 баллов / значений ).
Пример Input.data выглядит следующим образом:
Response
NA
1
2
3
NA
1
1
2
3
4
5
Вот код, который я пробовал, который не дал правильного решения:
Input.data$count.lag <- rollapplyr(Input.data[,c("Response")],list(-(4:0)),length, fill=NA)
Input.data$stdev <- ifelse(Input.data$count.lag <5, "NA",
rollapplyr(Input.data[,c("Response")],list(-(4:0)),sd,fill=NA))
Input.data$mean <- ifelse(Input.data$count.lag <5, "NA",
rollapplyr(Input.data[,c("Response")],list(-(4:0)),mean,fill=NA))
это дало следующее, что было не тем, что я хочу:
Response count.lag stdev mean
NA NA NA NA
1 NA NA NA
2 NA NA NA
3 NA NA NA
NA 5 NA NA
1 5 NA NA
1 5 NA NA
2 5 NA NA
3 5 NA NA
4 5 1.303840 2.2
5 5 1.581139 3.0
Вот как должен был быть вывод:
Response count.lag stdev mean
NA 4 NA NA
1 4 NA NA
2 4 NA NA
3 4 NA NA
NA 5 1.303840 2.2
1 5 1.581139 3.0
1 5 1.581139 4.0
2 5 1.581139 5.0
3 5 1.581139 6.0
4 5 1.581139 7.0
5 5 1.581139 8.0
Может кто-нибудь предложить, где ошибки и / или альтернативное решение, которое работает? Спасибо!