根据 R 中此列中的值自动为数据框中的列查找最佳 Class

Automatically Find Best Class for Column in Data Frame Based on Values in this Column in R

我有一个数据框,其中所有列都有字符 class。我想自动将每列的 classes 转换为最适合数据的 class。

考虑以下示例数据:

data <- data.frame(x1 = letters[1:5],
                   x2 = as.character(1:5),
                   x3 = as.character(seq(0.2, 1, 0.2)))
data
  x1 x2  x3
1  a  1 0.2
2  b  2 0.4
3  c  3 0.6
4  d  4 0.8
5  e  5   1

示例数据中的所有列都具有字符 class:

sapply(data, class)
#          x1          x2          x3 
# "character" "character" "character"

我可以手动将每一列转换为所需的 class。但是,对于大型数据集,这可能效率不高。

有没有办法自动扫描每一列中的值并将相应的列转换为更好的class?

在此示例中,x2 列包含整数,x3 列包含数值。因此,所需的 classes 将如下所示:

sapply(data, class)
#          x1          x2          x3 
# "character"   "integer"   "numeric"

使用 type.convert()as.is=TRUE 防止将字符强制转换为因子。

data <- data |> type.convert(as.is=TRUE)

str(data)    
# 'data.frame': 5 obs. of  3 variables:
# $ x1: chr  "a" "b" "c" "d" ...
# $ x2: int  1 2 3 4 5
# $ x3: num  0.2 0.4 0.6 0.8 1

R < 4.1:

data <- type.convert(data, as.is=TRUE)