我有一个约250个变量的数据框.不幸的是,所有这些变量都是从sql数据库中导入为字符类的sqldf
.问题是:所有这些都不应该是字符类.有数字变量,整数,以及日期.我想构建一个运行在所有变量上的模型,为此我需要确保变量具有正确的类.一个接一个地做它可能是最好的,但仍然非常手动.
我怎么能自动纠正所有课程?也许是一种检测列中是否有字母字符或只有数字字符的方法?
我不认为自动方法可以完美地纠正所有课程.但它可能会纠正大多数类,然后是那些不好的类,我可以手动处理它们.
我正在添加一个sqldf标签,以防任何人在导入数据时知道如何纠正这个问题,但我认为这不是sqldf的错,而是数据库的错误.
最接近数据框上的"自动"类型转换可能是
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()
列强制为"最合适"的类型.