You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的fread与fwrite间保留data.table字段的原始数据类型?

解决data.table字符型数值字段读写时自动转整数的问题
  • 给字段加标记再写入
    给字符类型的数值字段加个非数字标记(比如单引号前缀),让fread识别为字符:

    library(data.table)
    dt <- data.table(id = c("1", "2", "3")) # 原始字符型数值字段
    
    # 写入前给id加单引号前缀
    dt[, id := paste0("'", id)]
    fwrite(dt, "data.txt")
    
    # 读取后可按需去掉前缀
    dt_read <- fread("data.txt")
    dt_read[, id := substr(id, 2, nchar(id))]
    
  • 读取时强制指定字段类型
    不用改写入的文件,直接在fread时用colClasses参数指定字段为字符:

    fwrite(dt, "data.txt")
    # 读取时指定id字段是字符类型
    dt_read <- fread("data.txt", colClasses = list(character = "id"))
    
  • 写入时用引号包裹字段
    利用fwrite的quote参数,把需要保留类型的字段用引号包起来,读取时自动识别为字符:

    # 写入时指定quote参数为目标字段名
    fwrite(dt, "data.txt", quote = "id")
    # 直接读取就保留字符类型
    dt_read <- fread("data.txt")
    
  • 用R专属格式保存
    如果不需要文本文件的通用性,直接用RDS或者fst格式,能完整保留所有类型:

    # RDS方式
    saveRDS(dt, "data.rds")
    dt_read <- readRDS("data.rds")
    
    # fst方式(需先install.packages("fst"))
    library(fst)
    write_fst(dt, "data.fst")
    dt_read <- read_fst("data.fst")
    

内容的提问来源于stack exchange,提问作者user19436508

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:03:29