2

我有以下问题。我有一个数据框,由国家“标识符”(字母+数字)、“年份”(数字)、“唯一标识符”(标识符+年份)、“劳动力市场 1”(数字)统计数据和“劳动力市场 2”统计数据组成"(数字),其中劳动力市场 2 的一些数据缺失,需要进行插值。运行库(imputeTS)后,我收到以下消息:

库(imputeTS)警告消息:未知或未初始化的列:'x'。

运行后

数据 <- na.interpolation(数据)

我收到以下错误:

警告消息:1:未知或未初始化的列:'x'。2: imputeTS: 由于此错误>in na.interpolation(data[, i], option): 输入 x 不是数字,因此未对第 1 列执行插补

3: imputeTS: 由于这个错误>in na.interpolation(data[, i], option), 没有对第 2 列执行插补: 输入 x 不是数字

4: imputeTS: 由于此错误>in na.interpolation(data[, i], option): 输入 x 不是数字,因此未对第 3 列执行插补

5: imputeTS: 由于这个错误>in na.interpolation(data[, i], option), 没有对第 5 列执行插补: 输入 x 不是数字

有趣的是,在我将 R 版本从 3.2.3 更新到最新的 3.5.1 (2018-07-02) -- "Feather Spray" 后,na.interpolation(data) 停止工作。

我想知道是否有解决方案可以消除警告并执行插值而不恢复到旧版本的 R。

先感谢您!

4

1 回答 1

1

我猜你的数据集的一列有问题。该消息清楚地表明您有一个非数字列。您是否尝试过跳过非数字列?我最近在使用 imputeTS 包进行元素估算时遇到了同样的问题。我的解决方法是跳过字符列。就我而言,我有一个代表国家/地区的数据框列表。一些数据框只有前两列(国家和年份)是字符。

list_imputed_values <- lapply(list_of_dataframes, function(x){
if (ncol(x) == 3) { # apply imputation to the third column only
name <- names(x)[3]
fixed <- x[, 1:2]
imputable <- x[, 3]
imputed <- as.data.frame(imputeTS::na.interpolation(imputable))
names(imputed) <- name
x <- cbind(fixed, imputed)
} else if (ncol(x) == 2) { # do not apply imputation because columns are non-numeric
x <- x[, 1:2]
 } else {  # apply imputation to all non-numeric columns
fixed <- x[, 1:2]
imputable <- x[, 3:ncol(x)]
imputed <- imputeTS::na.interpolation(imputable)
x <- cbind(fixed, imputed)
  }})
于 2018-09-25T06:15:44.387 回答