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

Any way to automatically correct all variable classes in a dataframe

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

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

我认为自动方法不可能完美地纠正所有 类。但它可能会纠正大部分类,然后那些不好的,我可以手动处理。

我正在添加一个 sqldf 标签,以防有人知道在导入数据时可以通过任何方式纠正此问题,但我认为这不是 sqldf 的错,而是数据库的错。

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

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

其中 df 是您的数据集。函数 type.convert()

Converts a character vector to logical, integer, numeric, complex or factor as appropriate.

阅读 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() 将列强制转换为 "most appropriate" 类型。