如何在整个数据集中替换缺少值的数字?

时间:2018-01-31 15:57:16

标签: r function for-loop if-statement

我编写了一个用户定义的函数,该函数应该获取数据集和一些符号,扫描整个数据集并用缺少的值替换此数字的所有实例。代码工作正常,直到我把它放在用户定义的函数(循环和条件工作)。我无法弄清楚为什么它现在不起作用。没有警告或错误,它只是不起作用。另外,我想询问是否有办法选择在哪个列上执行此操作?

我的代码是:

repMissing = function(ds,x)
{
  for(i in 1:nrow(ds))
  {
    for(j in 1:ncol(ds))
    {
      if (!is.na(ds[i,j]) && ds[i,j] == x)
      {
        ds[i,j] = NA
      }
    }
  }
}

我运行了以下代码:

repMissing(diet2,-99)

出于某种原因,-99仍然不是NA。

任何建议都将受到赞赏。谢谢!

编辑:这个问题与之前的问题不同,因为我不仅询问如何执行任务,还问我的代码有什么问题,这与以前的问题不同。

1 个答案:

答案 0 :(得分:2)

如果要在整个数据框中替换-99的所有出现,可以使用:

df[ df == -99] <- NA

将其整合回功能:

repMissing <- function(df, x) { df[ df == as.integer(x)] <- NA } 

更进一步,您甚至可以指定给定数据框中要执行操作的列。请参阅下面的一些示例代码,该代码仅在“a”列中替换数据框df中出现的所有-99:

df[, colnames(df) %in% df('a')][df[, colnames(df) %in% c('a')] == -99] <- NA