【问题标题】:How to replace a number with missing values all over the dataset? [duplicate]如何在整个数据集中用缺失值替换数字? [复制]
【发布时间】:2018-01-31 15:57:15
【问题描述】:

我编写了一个用户定义的函数,它应该获取一个数据集和一些符号,扫描整个数据集并用缺失值替换这个数字的所有实例。代码工作得很好,直到我把它放在一个用户定义的函数中(循环和条件工作)。我不知道为什么它现在不起作用。没有警告或错误,它只是不起作用。另外想问一下有没有办法选择在哪些列上做这个操作?

我的代码是:

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。

任何建议将不胜感激。谢谢!

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

【问题讨论】:

    标签: r function for-loop if-statement


    【解决方案1】:

    如果你想在整个数据框中替换所有出现的 -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
    

    【讨论】:

    • 谢谢山姆,我一定会采纳你的建议,但就常识而言,为什么我的代码不起作用?那是在我把它放在一个函数中之前......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多