【问题标题】:ERROR in chartr(........), : invalid input '....' in 'UTF8TOWCS'图表中的错误(........),:'UTF8TOWCS'中的无效输入'....'
【发布时间】:2020-08-13 17:12:19
【问题描述】:

我需要您的帮助,因为尝试不同的方法时会出现相同的错误。我想删除“áéíóúÁÉÍÓÚýÝ”、“àèìòùÀÈÌÒÙ”“âêîôûÂÊÎÔÛ”、“ãõÃÕñÑ”、“äëïöüÄËÏÖÜÿ”、“çÇ”等特殊字符到“aeiouAEIOUXX”、“aeiouAEIOU”、“AEIOUAEIOU”、“AOAOIOXX”、“AEIOUAE” “XX”来自数据框。 谢谢!!!

首先我尝试这样做:

trata<-function(Campo){
  Campo<-Campo %>% chartr('ÇÆ£ØÞß&@Ð','XXXXXXXXX',.) %>%
    str_to_upper(locale = "es") %>% str_trim(side = "both") %>%
    str_replace_all("['´`^]","") %>% chartr('ÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛÅÃÕÑ','AEIOUAEIOUAEIOUAEIOUAAOX', .)
  return(Campo)
}


trataRS<-function(Campo){
  Campo<-Campo %>% chartr('ÇÆ£ØÞßÐ','XXXXXXXXX',.) %>%
    str_to_upper(locale = "es") %>% str_trim(side = "both") %>%
    str_replace_all("['´`^]","") %>% chartr('ÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛÅÃÕ','AEIOUAEIOUAEIOUAEIOUAAO', .)
  return(Campo)
}

然后我将这些函数应用于:

Base$paterno_originador<-trata(Base$paterno_originador)
Base$razon_originador <- trataRS(Base$razon_originador)

但我收到了这个错误:

Error in chartr("ÇÆ£ØÞßÐ","XXXXXXXXX",.) : invalid input 'HÉCTOR" in 'utftowcs'

所以我尝试了一种与@Alexandre_Lima 不同的方法:

rm_accent <- function(str,pattern="all") {
  if(!is.character(str))
    str <- as.character(str)
  
  pattern <- unique(pattern)
  
  if(any(pattern=="Ç"))
    pattern[pattern=="Ç"] <- "ç"
  
  symbols <- c(
    acute = "áéíóúÁÉÍÓÚýÝ",
    grave = "àèìòùÀÈÌÒÙ",
    circunflex = "âêîôûÂÊÎÔÛ",
    tilde = "ãõÃÕñÑ",
    umlaut = "äëïöüÄËÏÖÜÿ",
    cedil = "çÇ"
  )
  
  nudeSymbols <- c(
    acute = "aeiouAEIOUyY",
    grave = "aeiouAEIOU",
    circunflex = "AEIOUAEIOU",
    tilde = "AOAOXX",
    umlaut = "AEIOUAEIOUX",
    cedil = "XX"
  )
  
  accentTypes <- c("´","`","^","~","¨","ç")
  
  if(any(c("all","al","a","todos","t","to","tod","todo")%in%pattern)) # opcao retirar todos
    return(chartr(paste(symbols, collapse=""), paste(nudeSymbols, collapse=""), str))
  
  for(i in which(accentTypes%in%pattern))
    str <- chartr(symbols[i],nudeSymbols[i], str) 
  
  return(str)
}

但我遇到了类似的错误:

Error in chartr(paste(symbols, collapse = ""), paste(nudeSymbols, collapse = ""),  : 
  invalid input 'RUÍZ' in 'utf8towcs'

我写这个是为了向你展示编码。如果该列中有特殊字符,则显示 UTF-8:

编码(Base$nombre_originador) [1] “未知” “UTF-8” “未知” “UTF-8”

【问题讨论】:

    标签: r utf-8 special-characters


    【解决方案1】:

    'utf8towcs'输入无效的解决方法是在将.csv文件导入R时设置你的编码。

    1. 当您使用 read.csv() 或 read.delim() 导入文件时,请指定 encoding = "UTF-8" 或 encoding = "Latin-1"。我尝试使用“Latin-1”并解决了它。

    2. 您可能还想检查您的系统编码是什么,并与之匹配。您可以使用 Sys.getlocale() 执行此操作(并使用 Sys.setlocale() 进行设置。)例如在我的系统上:

    Sys.getlocale() [1] "en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8"

    一个例子

    data <- read.delim("input/data/data.txt", sep=";", 
                  encoding = "Latin-1", stringsAsFactors = F )
    
    data <- read.csv("input/data/data.csv", sep=";", 
                  encoding = "Latin-1", stringsAsFactors = F )
    

    最诚挚的问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-27
      • 2017-10-16
      • 2018-05-03
      • 1970-01-01
      • 2023-03-10
      • 2020-02-07
      • 2021-09-18
      • 1970-01-01
      相关资源
      最近更新 更多