Двойной цикл for с ifelse () не работает должным образом в R - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь просмотреть все столбцы моего фрейма данных и преобразовать «неизвестные» значения в 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 голосов
/ 04 ноября 2018

Запуск ifelse не изменяет значения ни одного из его аргументов. Вам нужно было бы присвоить результат обратно столбцу df. И делать это по строкам не имеет никакого смысла, потому что ifelse предназначен для использования в векторе, поэтому вместо этого это может быть:

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

Что еще не является оптимальным в свете гораздо более эффективной стратегии, показанной @TimBiegeleisen, но, по крайней мере, вы можете изучить это, чтобы узнать, как улучшить ваше понимание использования for -loops и ifelse при использовании R .

0 голосов
/ 03 ноября 2018

Мы можем попробовать:

df[df == "unknown"] = NA

Предполагается, что все ваши столбцы являются символами, а не факторами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...