Sql 自动更正数据帧中所有变量类的任何方法

Sql 自动更正数据帧中所有变量类的任何方法,sql,r,database,sqldf,Sql,R,Database,Sqldf,我有一个大约250个变量的数据帧。不幸的是,所有这些变量都是使用sqldf作为字符类从sql数据库导入的。 问题是:它们不应该都是字符类。有数字变量、整数和日期。我想构建一个运行所有变量的模型,要做到这一点,我需要确保变量具有正确的类。一个接一个地做可能是最好的,但仍然非常手工 如何自动更正所有类?也许是一种检测列中是否有字母字符或只有数字字符的方法 我不认为一种自动的方法能够完美地批改所有的课程。但它可能会纠正大多数类,然后那些不好的类,我可以手动处理它们 我添加了一个sqldf标记,以防任何

我有一个大约250个变量的数据帧。不幸的是,所有这些变量都是使用
sqldf
作为字符类从sql数据库导入的。 问题是:它们不应该都是字符类。有数字变量、整数和日期。我想构建一个运行所有变量的模型,要做到这一点,我需要确保变量具有正确的类。一个接一个地做可能是最好的,但仍然非常手工

如何自动更正所有类?也许是一种检测列中是否有字母字符或只有数字字符的方法

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

我添加了一个sqldf标记,以防任何人在导入数据时知道任何纠正方法,但我假设这不是sqldf的错误,而是数据库的错误。

最接近数据帧上“自动”类型转换的事情可能是

df[] <- lapply(df, type.convert)

我们可以看到,这些列被返回到它们原来的类。这是因为
type.convert()
将列强制为“最合适”的类型。

你好,Richard,我最近在另一个数据帧上使用了它,它给出了这个错误
error in FUN(X[[I]],…):第一个参数必须是模式字符
我想知道你是否知道为什么会发生这种情况,它看起来像type.convert()需要一个字符向量作为其第一个参数。我试着将我的df转换为as.character(df),但它只是将所有内容转换为factortype@jgozal如果希望字符保持为字符且不被强制为因子,请在
type.convert中将
as.is=TRUE
设置为.convert
,这样不会仍然将其他列转换为字符吗?@jgozal-No,您必须执行
df[]
## 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"