如何用R中列值的平均值替换缺失值?

时间:2017-04-10 09:21:16

标签: r

所以我在R中有一个数据框,让我们称之为数据集:

str(dataset)

'data.frame':   10 obs. of  4 variables:
 $ Country  : Factor w/ 3 levels "France","Germany",..: 1 3 2 3 2 1 3 1 2 1
 $ Age      :List of 10
  ..$ : int 44
  ..$ : int 27
  ..$ : int 30
  ..$ : int 38
  ..$ : int 40
  ..$ : int 35
  ..$ : num NA
  ..$ : int 48
  ..$ : int 50
  ..$ : int 37
 $ Salary   : num  72000 48000 54000 61000 63778 ...
 $ Purchased: Factor w/ 2 levels "No","Yes": 1 2 1 1 2 2 1 2 1 2

我希望使用这些列的相应方法替换Age和Salary列中的NA值。为此,我编写了以下代码:

dataset$Age = ifelse(is.na(dataset$Age),
                     ave(dataset$Age, FUN = function(x) mean(x, na.rm = TRUE)),
                     dataset$Age)

dataset$Salary = ifelse(is.na(dataset$Salary),
                     ave(dataset$Salary, FUN = function(x) mean(x, na.rm = TRUE)),
                     dataset$Salary)

以上代码适用于Salary列,但会在Age列中引发以下错误:

Warning message:
In mean.default(x, na.rm = TRUE) :
  argument is not numeric or logical: returning NA

我也尝试使用sapply:

dataset$Age = ifelse(is.na(dataset$Age),
                     sapply(dataset$Age, mean, na.rm = TRUE),
                     dataset$Age)

尽管sapply并没有发出任何警告,但它也不适合我。它只是取代了' na'使用' NaN'在Age列中的值。虽然申请Salary列时使用相同的代码。

请帮我确定问题所在以及如何使我的代码可行?谢谢!

0 个答案:

没有答案