以任何方式自动更正数据框中的所有变量类

jgo*_*zal 8 sql database r sqldf

我有一个约250个变量的数据框.不幸的是,所有这些变量都是从sql数据库中导入为字符类的sqldf.问题是:所有这些都不应该是字符类.有数字变量,整数,以及日期.我想构建一个运行在所有变量上的模型,为此我需要确保变量具有正确的类.一个接一个地做它可能是最好的,但仍然非常手动.

我怎么能自动纠正所有课程?也许是一种检测列中是否有字母字符或只有数字字符的方法?

我不认为自动方法可以完美地纠正所有课程.但它可能会纠正大多数类,然后是那些不好的类,我可以手动处理它们.

我正在添加一个sqldf标签,以防任何人在导入数据时知道如何纠正这个问题,但我认为这不是sqldf的错,而是数据库的错误.

Ric*_*ven 8

最接近数据框上的"自动"类型转换可能是

df[] <- lapply(df, type.convert)
Run Code Online (Sandbox Code Playgroud)

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" 
Run Code Online (Sandbox Code Playgroud)

我们可以看到列已返回到原始类.这是因为将type.convert()列强制为"最合适"的类型.