Прежде всего, чтобы преобразовать список векторов неравной длины в data.frame
, заполнив векторы NA
, ваш код неверен, этот лучше.
x <- 1:12
y <- 1:10
z <- 1:8
df <- list(x = x, y = y, z = z)
n <- max(sapply(df, length))
df <- lapply(df, function(x){
c(x, rep(NA, n - length(x)))
})
df <- do.call(cbind.data.frame, df)
Следующий код заменит первый NA
в каждой строке значением 3
.
. Он перебирает строки, используя apply
, и изменяет строки хотя бы с одним значением NA
.
df[] <- t(apply(df, 1, function(x){
if(anyNA(x)){
i <- min(which(is.na(x)))
x[i] <- 3
}
x
}))
df
# x y z
#1 1 1 1
#2 2 2 2
#3 3 3 3
#4 4 4 4
#5 5 5 5
#6 6 6 6
#7 7 7 7
#8 8 8 8
#9 9 9 3
#10 10 10 3
#11 11 3 NA
#12 12 3 NA