Я пытаюсь создать пользовательскую функцию для замены пропущенных значений в каждой переменной с использованием указанных c вероятностей.
Я могу получить вероятности для печати, но вторая часть кода, кажется, не работает, и все пропущенные значения все еще остаются.
Я не получаю какое-то конкретное сообщение об ошибке, которое так озадачило почему не работает.
Мои данные:
library(dplyr)
library(glue)
structure(list(id = c("395891", "373742", "316241", "282072",
"341331", "251761", "154591", "125051", "095361", "141822", "281411",
"31571", "165191", "03212", "08091", "26172", "135561", "164331",
"344511", "37352"), ph201_01 = c(1L, NA, 1L, 1L, NA, 1L, 1L,
NA, NA, NA, 1L, NA, NA, 1L, NA, 1L, NA, NA, 1L, NA), ph201_02 = c(NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_), ph201_03 = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, NA, NA, NA,
NA, NA, NA), ph201_04 = c(NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -20L))
Мой код:
# Create user-defined function
create_mock_vars = function(var) {
# get prevalence
prev = round(sum(mydata[[var]], na.rm=TRUE)/nrow(mydata), 2)
print(glue("Prevalence of {var} is {prev}."))
mydata[[var]][is.na(mydata[[var]])] = sample(0:1, size=sum(is.na(mydata[[var]])), replace=TRUE, prob=c(prev, 1-prev))
return(mydata)
}
# Get list of variable names I want to impute
myvarnames = names(mydata[,-1])
# Apply my function
sapply(myvarnames, create_mock_vars)
glimpse(mydata)