带 ifelse() 的双循环在 R 中无法正常工作

Double for loop with ifelse() is not working properly in R

我正在尝试 运行 遍历数据框的每一列并将 "unknown" 值转换为 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
}

无济于事。没有得到错误,代码出现运行没有问题;只有值保持为“未知。

我们可以试试:

df[df == "unknown"] = NA

这假设您所有的列都是字符而不是因子。

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

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

鉴于@TimBiegeleisen 说明的更有效的策略,这仍然不是最优的,但至少你可以研究它以了解如何提高你对使用 for 循环和 ifelse 当使用 R.