Лучшая функция для этих ситуаций - type_convert () , из readr
:
"[type_convert()
повторно конвертирует символьные столбцы во фрейме данных], что полезно, если вам нужно выполнить ручное манипулирование - вы можете прочитать столбцы как символьные, очистить их с помощью (например) регулярных выражений и другие преобразования, а затем пусть readr
предпримет еще один удар при разборе. "
Итак, все, что вам нужно сделать, это добавить его в конец вашей трубы:
df %>% ... %>% type_convert()
В качестве альтернативы мы можем использовать type.convert
из base R
, что автоматически определит тип столбца на основе значения и изменит его
df[] <- type.convert(df, as.is = TRUE)
Если ограничение заключается в поиске столбцов, содержащих только один символ
i1 <- !colSums(nchar(as.matrix(df)) > 1)
df[i1] <- type.convert(df[i1])
Если мы хотим использовать tidyverse
, существует parse_guess
с readr
library(tidyverse)
library(readr)
df %>%
mutate_if(all(nchar(.) == 1), parse_guess)