Есть ли лучший способ пройти наблюдения в кадре данных и ввести значения NA? Я собрал цикл «for», который, похоже, выполняет эту работу, заменяя NA с средним значением строки, но мне интересно, есть ли лучший подход, который не использует цикл for для решения этой проблемы - возможно, встроенная функция R?Замена или вменение значений NA в R без цикла Loop
# 1. Create data frame with some NA values.
rdata <- rbinom(30,5,prob=0.5)
rdata[rdata == 0] <- NA
mtx <- matrix(rdata, 3, 10)
df <- as.data.frame(mtx)
df2 <- df
# 2. Run for loop to replace NAs with that row's mean.
for(i in 1:3){ # for every row
x <- as.numeric(df[i,]) # subset/extract that row into a numeric vector
y <- is.na(x) # create logical vector of NAs
z <- !is.na(x) # create logical vector of non-NAs
result <- mean(x[z]) # get the mean value of the row
df2[i,y] <- result # replace NAs in that row
}
# 3. Show output with imputed row mean values.
print(df) # before
print(df2) # after
, когда вы предоставляете данные с генерацией случайных чисел – mlegge
@akrun, хорошая находка. Кажется, ответ такой же, как у меня. О, ну, великие мысли думают так, как я думаю :) –
@akrun imo, этот вопрос не тождественен ... ни один ответ не был принят по другому вопросу OP. ;) Я действительно думаю, что это помогает другим учиться, видя различные способы приближения и задавая связанный с ним вопрос, особенно в Р. Ответы на объяснения и структуру этого вопроса, я считаю, имеют определенную ценность. – bridgbro