Любой способ автоматического исправления всех классов переменных в фрейме данных
У меня есть фрейм данных с переменными ~250. К сожалению, все эти переменные были импортированы как классы символов из базы данных sql с помощью sqldf
.
Проблема: все они не должны быть классами символов. Существуют числовые переменные, целые числа, а также даты. Я хотел бы построить модель, которая работает над всеми переменными, и для этого мне нужно убедиться, что переменные имеют правильные классы. Делать это один за другим, вероятно, лучше, но все же очень вручную.
Как могу ли я автоматически исправить все классы? Возможно, способ определить, есть ли символы алфавита в столбце или только числовые символы?
Я не думаю, что автоматический подход может быть идеальным для исправления всех классов. Но это может исправить большинство классов, тогда те, которые не хороши, я могу позаботиться о них вручную.
Я добавляю тег sqldf, если кто-нибудь знает, как это исправить при импорте данных, но я предполагаю, что это не вина sqldf, а скорее база данных.
1 ответов
самое близкое к" автоматическому " преобразованию типа в фрейме данных, вероятно, будет
df[] <- lapply(df, type.convert)
здесь df
набор данных. Функция type.convert()
преобразует символьный вектор в логический, целочисленный, числовой, сложный или фактор по мере необходимости.
прочитать help(type.convert)
, это может быть просто то, что вы хотите.
по моему опыту, type.convert()
- Это очень надежно. Вы можете использовать as.is = TRUE
если вы не хотите персонажи принуждены к факторам. Кроме того, он используется внутри многих важных функций R (например,read.table
), так что это абсолютно безопасно.
вот краткий пример его работы над iris
. Сначала мы изменим все столбцы на символ, затем запустите type.convert()
на нем.
## Original column classes in iris
sapply(iris, class)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# "numeric" "numeric" "numeric" "numeric" "factor"
## Change all columns to character
iris[] <- lapply(iris, as.character)
sapply(iris, class)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# "character" "character" "character" "character" "character"
## Run type.convert()
iris[] <- lapply(iris, type.convert)
sapply(iris, class)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# "numeric" "numeric" "numeric" "numeric" "factor"
мы видим, что столбцы были возвращены в исходные классы. Это потому что type.convert()
coerces столбцов для" наиболее подходящего " типа.