У меня есть input
data.frame, который содержит два нежелательных элемента (т.е. "#N/A",'p'
) в нем. Я чищу и заменяю элементы на NA
.
Затем я удаляю все строки с NA
, чтобы получить полностью чистый data.frame с ТОЛЬКО первым (id
) и последним (read_2018
) столбцами, состоящими только из чисел.
Вопрос: ПОЧЕМУ ИМХО класс id
и read_2018
является фактором? Как исправить это автоматически для любого data.frame ФУНКЦИОНАЛЬНЫМ способом (например, используя loop
)?!
То есть после полной очистки я хочу, чтобы любой столбец, состоящий из ВСЕХ чисел, стал класса цифра c, все, что является символом ВСЕ, становится символом класса et c.?
input <- data.frame(id = c(1,"#N/A",3, 4), school = LETTERS[1:4], read_2018 =c("#N/A",'p',9, 8))
sapply(input, class) ## check class of all columns
#> id school read_2018
#> "factor" "factor" "factor"
replace = c("#N/A", 'p') # Unwanted elements to be replaced
with = NA # with `NA`
input[sapply(input, `%in%`, replace)] <- with ## Now replace unwanted elements with `NA`
input <- na.omit(input) ## Remove all rows with `NA`
sapply(input, class) ## class of clean `input` without `NA` or character elements
#> id school read_2018 ###@@@ WHY STILL class of id and read_2018 is factor? How to fix?!
#> "factor" "factor" "factor"