【问题标题】:Double for loop with ifelse() is not working properly in R带有 ifelse() 的双 for 循环在 R 中无法正常工作
【发布时间】:2019-04-07 16:18:27
【问题描述】:

我正在尝试遍历数据框的每一列并将“未知”值转换为 NA。我尝试了以下代码:

for (i in seq(length(df))) {
 for (j in seq(nrow(df))) {
      ifelse(df[,i][j] == "unknown", NA, df[,i][j])
 }
}

然而,它并没有改变任何值。我要更改的列是因素,所以我也尝试了:

for (i in seq(length(df))) {
 x <- class(df[,i])
 as.character(df[,i])
 for (j in seq(nrow(df))) {
      ifelse(df[,i][j] == "unknown", NA, df[,i][j])
 }
 class(df[,i]) <- x
}

无济于事。没有获得错误,代码似乎运行没有问题;只有值保持为“未知”。

【问题讨论】:

  • 您可以在将数据读取到 R 时处理此问题;请检查read.table 中的na.strings 参数。
  • ifelse not 与 if 和 else 相同。

标签: r for-loop if-statement na class-factory


【解决方案1】:

我们可以试试:

df[df == "unknown"] = NA

这假定您的所有列都是字符而不是因素。

【讨论】:

    【解决方案2】:

    运行 ifelse 不会更改其任何参数的值。您需要将结果分配回df 列。并且按行执行没有任何意义,因为 ifelse 旨在用于向量,所以它可能是:

    for (i in seq(length(df))) {
           df[,i] <- ifelse(df[,i] == "unknown", NA, df[,i] )
     }
    }
    

    鉴于@TimBiegeleisen 说明的更有效的策略,这仍然不是最佳选择,但至少你可以研究一下,看看如何在使用 R 时提高你对使用 for-loops 和 ifelse 的理解.

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2020-10-27
      • 1970-01-01
      相关资源
      最近更新 更多