我有一个数据集,其中包含498个变量,包括数字、逻辑、日期和其他类型,并且我将其作为R中的数据框,行表示观测值,列表示变量。这些变量中有一部分缺失值,我希望用该变量的均值来替换它们。
我编写了一个非常简单的函数来执行均值插补:
我编写了一个非常简单的函数来执行均值插补:
impute.mean <- function(x) replace(x, is.na(x), mean(x, na.rm = TRUE))
如果我只将其应用于单个变量,比如dataset$variableA,那么它可以完美地运行:
dataset$variableA <- impute.mean(dataset$variableA)
如果我手动逐个变量进行填充,对于“one”变量来说,这样做可以得到我想要的结果,但是因为我有一个相当大的变量子集需要这样做,所以我不想手动操作。
我的第一反应是使用R中的其中一个apply函数进行高效的操作,但是我似乎不太理解如何确切地操作。
粗略的第一次尝试是使用标准的apply:
newdataset <- apply(dataset, 2, impute.mean)
这显然有些粗糙,因为它试图将函数应用于包括非数字变量在内的所有列,但即使它可能会生成许多警告,它似乎是一个合理的起点。然而,可惜的是,这种方法没有起作用,所有的变量都保持不变。
我也尝试了lapply、mapply、ddply等方法进行实验,但迄今为止都没有成功。
理想情况下,我希望能够做到这样:
relevantVariables <- c("variableA1", "variableA2", ..., "variableA293")
newdataset <- magical.apply(dataset, relevantVariables, impute.mean)
有没有一些类似的应用程序可以按照这种方式工作?
或者,有没有其他有效的方法来处理这个问题?