Часть функций, которые я включаю в R-пакет, включает заполнение NAs
последним перенесенным наблюдением (locf
). Locf должен быть применен ко всем столбцам в фрейме данных, кроме того, что я назвал ниже хороших столбцов goodcols
(т.е. должен применяться к badcols
). Имена столбцов для badcols
могут быть любыми. Я использую функцию locf
ниже и цикл for, чтобы добиться этого. Однако цикл for работает немного медленнее при использовании большого набора данных. Может ли кто-нибудь предложить более быструю альтернативу или другой способ заполнения НП в представленном сценарии?
Вот пример фрейма данных:
#Test df
TIME <- c(0,5,10,15,20,25,30,40,50)
AMT <- c(50,0,0,0,50,0,0,0,0)
COV1 <- c(10,9,NA,NA,5,5,NA,10,NA)
COV2 <- c(20,15,15,NA,NA,10,NA,30,NA)
ID <- rep(1, times=length(TIME))
df <- data.frame(ID,TIME,AMT,COV1,COV2)
df <- expand.grid(df)
goodcols <- c("ID","TIME","AMT")
badcols <- which(names(df)%in%goodcols==F)
#----------------------------------------------------
#locf function
locf <- function (x) {
good <- !is.na(x)
positions <- seq(length(x))
good.positions <- good * positions
last.good.position <- cummax(good.positions)
last.good.position[last.good.position == 0] <- NA
x[last.good.position]
}
#------------------------------------------------------
#Now fill in the gaps by locf function
for (i in badcols)
{
df[,i] <- locf(df[,i])
}
na.locf
из пакетаzoo
? - person Jaap   schedule 03.10.2016goodcols
. Имена столбцов для вменения неизвестны. Следовательно, мне нужно что-то общее, что я могу использовать; который изображен в цикле for, который у меня есть. Можно использовать na.locf, если я действительно знаю имя столбца для вменения. - person daragh   schedule 03.10.2016