gpt4 book ai didi

r - 对 R 中的大量变量子集应用均值插补

转载 作者:行者123 更新时间:2023-12-01 23:30:22 25 4
gpt4 key购买 nike

我有一个包含 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)

是否有一些应用函数以这种方式工作?

或者,还有其他有效的方法来解决这个问题吗?

最佳答案

您可以使用 data.table 包有效地完成此操作:

SetNAsToMean <- function(dt, vars) {                                                                                                                             
# Sets NA values of columns to the column means
#
# Args:
# dt: data.table object to work with
# vars: vector of column names to replace NAs
#
# Returns:
# Nothing. Alters data.table in place.
#
# Example:
# dt <- data.table(num1 = c(1, NA, 3),
# num2 = c(NA, NA, 4),
# char1 = rep("a", 3))
# SetNAsToMean(dt, c("num1", "num2"))
# # Alternatively, set all numeric columns
# numerics <- which(lapply(dt, class) == "numeric")
# SetNAsToMean(dt, numerics)
require(data.table)
for (var in vars) {
set(dt, which(is.na(dt[[var]])), var, mean(dt[[var]], na.rm=T))
}
}

关于r - 对 R 中的大量变量子集应用均值插补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com