代码之家  ›  专栏  ›  技术社区  ›  user63230

使用字符类型变量读取csv文件,但扩展科学符号readr

  •  0
  • user63230  · 技术社区  · 5 年前

    我有一个 csv 文件中包含一个变量( id ).在 excel 当我检查单元格的格式时,有些单元格是 general 有些是 scientific :

    #            id
    # 1 ge189839898     #general format cell in excel
    # 2   we7267178     #general format cell in excel
    # 3     2.8E+12     #scientific format cell in excel
    

    当我把文件读入 R 使用 read_csv ,它认为该列是 character (这就是我想要的)但这意味着 2.8E+12 也是一个角色。

    options(digits = 22, scipen = 9999)
    library(tidyverse)
    dfcsv <- read_csv("file.csv")
    #where dfcsv looks like:
    dfcsv <- data.frame(id = c("ge189839898",
                            "we7267178",
                            "2.8E+12"))
    dfcsv
    #            id
    # 1 ge189839898     
    # 2   we7267178    
    # 3     2.8E+12  
    

    有没有一种方法可以自动读取 csv 这样就可以正确识别混合类型的变量,从而返回 性格 变量,但科学符号是扩展的:

    #               id
    # 1    ge189839898
    # 2      we7267178
    # 3  2800000000000
    

    我不认为 guess_max 这就是我想要的 here .我也不想使用 grep / sprintf 键入解决方案(如果可能的话),因为我认为这是为了解决我不应该遇到的问题?我发现这些问题 身份证件 这是偶然的,所以我想在阅读阶段用一种自动化的方式来完成。

    最干净的解决方案可能是进入 csv 文件并在那里进行转换,但我想通过 R .

    谢谢

    0 回复  |  直到 5 年前
        1
  •  2
  •   r2evans    5 年前
    id <- c("ge189839898", "we7267178", "2.8E+12")
    func <- function(x) {
      poss_num <- suppressWarnings(as.numeric(x))
      isna <- is.na(poss_num)
      x[!isna] <- format(poss_num[!isna], scientific = FALSE)
      x
    }
    func(id)
    # [1] "ge189839898"   "we7267178"     "2800000000000"