2016-12-20 14 views
-1

Я собираюсь очистить некоторые данные для анализа выживаемости, и я стараюсь сделать так, чтобы отсутствующие данные вменялись в зависимости от окружающих значений в пределах данный предмет. Я хотел бы использовать среднее значение ближайших предыдущих и ближайших последующих значений для участника. Если последующего значения нет, то я хотел бы использовать предыдущее значение, перенесенное вперед, до тех пор, пока не появится следующее значение.Очистка данных для анализа выживаемости с использованием собственных данных участника для поддающихся значению

Я пытаюсь разбить проблему на более мелкие, более управляемые операции и объекты, однако решения, которые я продолжаю прибегать, вынуждают меня использовать условное форматирование на основе строк непосредственно выше и ниже отсутствующего значения и, откровенно говоря, я немного потерял, как это сделать. Мне хотелось бы немного руководства, если вы думаете, что знаете хорошую технику, которую я могу использовать, экспериментировать, или если вы знаете какие-либо хорошие условия поиска, которые я могу использовать при поиске решения.

Подробности ниже:

#Fake dataset creation 
id <- c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4) 
time <-c(0,1,2,3,4,5,6,0,1,2,3,4,5,6,0,1,2,3,4,5,6,0,1,2,3,4,5,6) 
ss <- c(2,2,4,3,NA,0,0,1,4,0,NA,0,0,0,4,2,1,3,3,2,NA,3,4,3,NA,NA,0,0) 
mydat <- data.frame(id, time, ss) 

* Жирный и подчеркнутый символы представляют изменения из набора данных выше

Цель здесь состоит, чтобы найти способ, чтобы получить значения НС для ID # 1 (переменная сс), чтобы выглядеть следующим образом: 2,2,4,3, 1.5, 0,0

ID # 2 (переменная SS), чтобы выглядеть следующим образом: 1,4,0, , 0,0,0

ID # 3 (переменная ss), чтобы выглядеть следующим образом: 4,2,1,3,3,2, NA (без изменений, поскольку строка с NA будет удалена в конце концов)

ID # 4 (переменные сс), чтобы выглядеть следующим образом: 3,4,3, , 1,5, 0,0 (это одна требует несколько изменений, и я ожидаю, что это наиболее сложной задачей).

+1

Вы, наверное, знаете, что в целом это лучшая практика, чтобы показать свои попытки для реализации алгоритма. В противном случае это может показаться неправильным использованием сообщества в качестве службы кодирования, что не так уж и круто. – lukeA

+0

Спасибо за головы. Я этого не понимал. Я обязательно сделаю это в следующий раз. –

+0

Последующие читатели этого Q & A должны понимать, что предлагаемый процесс «вменения» приведет к аннулированию статистических выводов из данных, поскольку ковариаты будут иметь меньшую изменчивость, чем реальность. Никакого шума не было, поэтому это не похоже на обычные методы статистического вменения. –

ответ

0

Если скорость обработки не проблема (я думаю «ID # 4» делает его трудно векторизации дележей), то, возможно, попробовать:

f <- function(x) { 
    idx <- which(is.na(x)) 
    for (id in idx) { 
    sel <- x[id+c(-1,1)] 
    if (id < length(x)) 
     sel <- sel[!is.na(sel)] 
    x[id] <- mean(sel) 
    } 
    return(x)     
} 
cbind(mydat, ss_imp=ave(mydat$ss, mydat$id, FUN=f)) 
# id time ss ss_imp 
# 11 1 0 2 2.0 
# 12 1 1 2 2.0 
# 13 1 2 4 4.0 
# 14 1 3 3 3.0 
# 15 1 4 NA 1.5 
# 16 1 5 0 0.0 
# 17 1 6 0 0.0 
# 21 2 0 1 1.0 
# 22 2 1 4 4.0 
# 23 2 2 0 0.0 
# 24 2 3 NA 0.0 
# 25 2 4 0 0.0 
# 26 2 5 0 0.0 
# 27 2 6 0 0.0 
# 31 3 0 4 4.0 
# 32 3 1 2 2.0 
# 33 3 2 1 1.0 
# 34 3 3 3 3.0 
# 35 3 4 3 3.0 
# 36 3 5 2 2.0 
# 37 3 6 NA  NA 
# 41 4 0 3 3.0 
# 42 4 1 4 4.0 
# 43 4 2 3 3.0 
# 44 4 3 NA 3.0 
# 45 4 4 NA 1.5 
# 46 4 5 0 0.0 
# 47 4 6 0 0.0 

 Смежные вопросы

  • Нет связанных вопросов^_^