Заменить NA в кадре данных факторными переменными

Я хотел бы создать функцию для замены NA на текст «NR» в факторных переменных фрейма данных.

Я нашел приведенный ниже код в Интернете, который отлично работает:

i <- sapply(data_5, is.factor) # Identify all factor variables in your data
data_5[i] <- lapply(data_5[i], as.character) # Convert factors to character variables
data_5[is.na(data_5)] <- 0 # Replace NA with 0
data_5[i] <- lapply(data_5[i], as.factor) # Convert character columns back to factors

Но я хотел бы преобразовать этот код в функцию с именем «remove_na_factor». Я попробовал, как показано ниже:

remove_na_factor <- function(x){
  i <- sapply(x, is.factor) # Identify all factor variables in your data
  x[i] <- lapply(x[i], as.character) # Convert factors to character variables
  x[is.na(x)] <- "NR" # Replace NA with NR
  x[i] <- lapply(x[i], as.factor) # Convert character columns back to factors

}

Когда я запускаю функцию для фрейма данных со значениями NA, ничего не происходит ... Заранее спасибо за помощь.

0
задан Phil973 27 June 2019 в 18:00
поделиться

1 ответ

Просто добавьте return(x) в конце Вашей функции:

remove_na_factor <- function(x){
  #your function body
  return(x)
}

можно также получить тот же результат с помощью tidyverse подход

library(tidyverse)
x %>% 
  mutate_if(is.factor, as.character) %>%   # Convert factors to character variables
  mutate_if(is.character, replace_na, "NR") %>% # Replace NA with NR
  mutate_if(is.character, as.factor)       # Convert character columns back to factors  
1
ответ дан Jilber Urbina 3 July 2019 в 04:10
поделиться
  • 1
    @AkiSuihkonen, О, мой, просто сделал тест jsperf в Firefox, огромной разнице.. | намного быстрее. – Tapirboy 1 March 2013 в 13:31
Другие вопросы по тегам:

Похожие вопросы: