Любой способ автоматического исправления всех классов переменных в фрейме данных

У меня есть фрейм данных с переменными ~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 столбцов для" наиболее подходящего " типа.