自动更正数据框中所有变量 类 的任何方法
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" 类型。
我有一个包含大约 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" 类型。