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

时间:2018-11-03 20:25:38

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

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

无济于事。没有错误,代码似乎可以正常运行。只有值保持为“未知”。

2 个答案:

答案 0 :(得分:2)

我们可以尝试:

df[df == "unknown"] = NA

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

答案 1 :(得分:2)

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

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

鉴于@TimBiegeleisen所展示的更有效的策略,这仍然不是最佳选择,但至少您可以研究一下以了解如何增进对使用for-循环和{{1} }使用R。