0

我正在尝试遍历数据框的每一列并将“未知”值转换为 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
}

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

4

2 回答 2

2

我们可以试试:

df[df == "unknown"] = NA

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

于 2018-11-03T20:35:12.850 回答
2

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

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

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

于 2018-11-03T22:22:48.490 回答