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

如何让R读取CSV的实际数值而非科学计数法格式

解决方案

你遇到的科学计数法问题本质是CSV导出工具(如Excel)将长数值自动转成科学计数法存储为文本了,CSV本身是纯文本格式不存在「自带格式」的说法,读取时按字符读取后做转换即可获取完整数值,具体方案如下:

通用适配方案(同时支持read.csv和read_csv)

步骤1:读取时指定目标列为字符类型,避免自动类型识别异常

假设混合数值和名称的列名为transaction_info:

  • read.csv(base R)写法:
df <- read.csv("你的银行文件路径.csv", colClasses = c(transaction_info = "character"))
  • read_csv(readr包)写法:
library(readr)
df <- read_csv("你的银行文件路径.csv", col_types = cols(transaction_info = col_character()))

步骤2:对列内容做格式转换,把科学计数法字符串转成完整数字字符串

首先设置R全局选项,避免数值转字符时自动输出科学计数法:

options(scipen = 999)

再使用自定义函数转换列内容:

convert_trans_info <- function(content) {
  # 匹配科学计数法格式的字符串
  is_sci_num <- grepl("^[0-9.]+E\\+[0-9]+$", content)
  # 符合格式的转成数值再转成完整字符串,不符合的保留原有名称
  content[is_sci_num] <- as.character(as.numeric(content[is_sci_num]))
  return(content)
}

df$transaction_info <- convert_trans_info(df$transaction_info)

注意:如果你的数值长度超过16位,as.numeric转换可能出现精度丢失,这种情况可以使用bit64包的integer64类型处理,转换逻辑替换为as.character(bit64::as.integer64(as.numeric(content[is_sci_num])))即可

最优方案(从源头避免问题)

如果可以调整导出规则,建议在导出CSV的工具(Excel、银行导出系统)中,将该列设置为文本格式后再导出,这样CSV中会直接存储完整的数字字符串,无需后续转换。

内容的提问来源于stack exchange,提问作者Willem. R. Nieuwenhuis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:09:01