带ifelse()的双for循环在R中工作不正常

带ifelse()的双for循环在R中工作不正常,r,for-loop,if-statement,na,class-factory,R,For Loop,If Statement,Na,Class Factory,我试图遍历数据帧的每一列,并将“未知”值转换为NAs。我尝试了以下代码: 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.characte

我试图遍历数据帧的每一列,并将“未知”值转换为NAs。我尝试了以下代码:

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
}
for(i在seq(长度(df))中){
我们可以试试:

df[df == "unknown"] = NA
这假设您的所有列都是字符而不是因子。

我们可以尝试:

df[df == "unknown"] = NA

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

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

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

df[,i]运行ifelse不会更改其任何参数的值。您需要将结果赋回到
df
的列中。按行执行没有任何意义,因为ifelse设计用于向量,因此它可能是:

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

df[,i]您可以在将数据读取到R时处理此问题;请检查
read.table
中的
na.strings
参数。if-else与if和else不同。您可以在将数据读取到R时处理此问题;请检查
read.table
中的
na.strings
参数。if-else与if和else不同。