【问题标题】:fread - Specify data type of one specific columnfread - 指定一个特定列的数据类型
【发布时间】:2020-09-04 06:24:28
【问题描述】:

我正在使用 data.table::fread 读取 csv 文件。有没有什么办法可以只指定一列的类型,让fread推断所有其他列?

背景:我有一个包含大约 60 列的 csv 文件。对于除一列之外的所有列, fread 推断出正确的数据类型。但是有一列是带有前导零的 id 列,它应该被读取为字符,但被解析为数字,删除前导零。

小例子:

csv 文件:

id, size, weight
001, 180, 75
0001, 190, 90
002, 160, 58

所需的数据表:

df = data.table(id=c("001", "0001", "002"), size=c(180, 190, 160), weight=c(75, 90, 58))

我知道我可以使用colClasses 参数来指定列类的列表,但我不希望这样,因为fread 可以正确推断除一列之外的所有列。

我不能df[,id] <- as.character(df[,id]),因为删除前导零会丢失信息。

【问题讨论】:

  • 来自文档(强调我的):“colClasses:与 utils::read.csv 中一样;即,与文件中的列相对应的类型的未命名向量,或命名向量按名称指定列的子集的类型。"
  • 这行得通,谢谢!我只需要colClasses = c('id'='character')
  • @otwtm 请自行回答您的问题

标签: r data.table fread


【解决方案1】:

正如 Roland 在评论中指出的那样,我们可以使用参数 colClasses“通过名称指定列子集的类型的命名向量”。

因此,在上面的小例子中,我们可以这样做:

df = fread(file="path/to/my_file.csv", colClasses = c('id'='character'))

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 2019-10-13
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多