5

我是 R 编程语言的新手。我只是想知道有没有办法在我们的数据集中只计算一列的空值。因为我见过的所有插补命令和库都插补了整个数据集的空值。

4

3 回答 3

14

这是一个使用Hmisc包的示例impute

library(Hmisc)
DF <- data.frame(age = c(10, 20, NA, 40), sex = c('male','female'))

# impute with mean value

DF$imputed_age <- with(DF, impute(age, mean))

# impute with random value
DF$imputed_age2 <- with(DF, impute(age, 'random'))

# impute with the media
with(DF, impute(age, median))
# impute with the minimum
with(DF, impute(age, min))

# impute with the maximum
with(DF, impute(age, max))


# and if you are sufficiently foolish
# impute with number 7 
with(DF, impute(age, 7))

 # impute with letter 'a'
with(DF, impute(age, 'a'))

查看?impute有关如何实施插补的详细信息

于 2012-10-29T01:30:28.183 回答
2

为什么不使用更复杂的插补算法,例如鼠标(链式方程的多重插补)?下面是 R 中的代码片段,您可以根据自己的情况进行调整。

library(mice)

#get the nhanes dataset
dat <- mice::nhanes

#impute it with mice
imp <- mice(mice::nhanes, m = 3, print=F)

imputed_dataset_1<-complete(imp,1)

head(imputed_dataset_1)

#     age  bmi hyp chl
# 1   1   22.5   1 118
# 2   2   22.7   1 187
# 3   1   30.1   1 187
# 4   3   24.9   1 186
# 5   1   20.4   1 113
# 6   3   20.4   1 184

#Now, let's see what methods have been used to impute each column
meth<-imp$method
#  age   bmi   hyp   chl
#"" "pmm" "pmm" "pmm"

#The age column is complete, so, it won't be imputed
# Columns bmi, hyp and chl are going to be imputed with pmm (predictive mean matching)

#Let's say that we want to impute only the "hyp" column
#So, we set the methods for the bmi and chl column to ""
meth[c(2,4)]<-""
#age   bmi   hyp   chl 
#""    "" "pmm"    "" 

#Let's run the mice imputation again, this time setting the methods parameter to our modified method
imp <- mice(mice::nhanes, m = 3, print=F, method = meth)

partly_imputed_dataset_1 <- complete(imp, 3)

head(partly_imputed_dataset_1)

#    age  bmi hyp chl
# 1   1   NA   1  NA
# 2   2 22.7   1 187
# 3   1   NA   1 187
# 4   3   NA   2  NA
# 5   1 20.4   1 113
# 6   3   NA   2 184
于 2017-03-13T15:44:30.857 回答
0

有很多软件包可以为您做到这一点。(有关数据的更多信息可以帮助向您建议最佳选择)

一个例子是使用VIM包。

它有一个名为kNN(k-nearest-neighbor imputation)的函数。这个函数有一个选项变量,您可以在其中指定哪些变量应被估算。

这是一个例子:

library("VIM")
kNN(sleep, variable = c("NonD","Gest"))

我在本例中使用的睡眠数据集与 VIM 一起提供。

如果您的列中存在一些时间依赖性,您想使用时间序列插补包进行插补也是有意义的。在这种情况下,您可以使用例如imputeTS包。这是一个例子:

  library(imputeTS)
  na_kalman(tsAirgap)

此处用作示例的 tsAirgap 数据集也与 imputeTS 一起提供。

于 2016-11-11T00:35:05.737 回答