【问题标题】:R - SQLDF issue with special charactersR - 特殊字符的 SQLDF 问题
【发布时间】:2017-03-21 19:57:50
【问题描述】:

我在使用 R 和特殊字符运行 sqldf 时遇到问题。

这是我正在运行的代码的一个小细节,让您了解发生了什么:

首先我从 excel 表中读取数据(使用 R 的 xlsx 包),xlsx2 方法似乎正确获取数据,字符似乎显示特殊字符,例如“Ñ”

verif_oblig <- try(read.xlsx2("My computer/Filename.xlsx", sheetName = 'VERIF_OBLIG'))
if("try-error" %in% class(verif_oblig)) 
  verif_oblig <- Empty()

然后我开始使用 sqldf 运行我的 sql 查询,结果表似乎将 Ñ 字符替换为 Ã'。这是查询:

verif_oblig_v2 <- sqldf("
  select 
  a.*,
  case when b.Estado is null then 'NO GENERADO'
  else b.Estado end as ESTADO, 
  case when resultado_operacion in ('EXITO','CORRECTO')
  then 'EXITO' 
  else 'SIN EXITO' 
  end as RESULTADO_ACTUAL
  from
  verif_oblig a left join fin2016 b 
  on
  a.CUPS = b.CUPS_Largo and a.DIVISION = b.DIVISION")

谁能帮我找到解决办法?

非常感谢

【问题讨论】:

  • 尝试将encoding中的read.xlsx2设置为“UTF-8”
  • 不,它是一个自定义函数,它创建一个包含所需列且没有数据的空数据框。然而,这不是错误发生的地方
  • 更改编码确实有效,但我不确定它是否能解决问题。是 sqldf 引入了错误
  • 您需要创建可重现的错误(带有此类错误的小data.frame)以允许任何人复制粘贴和测试
  • 我正在使用 2 组数据,其中一组来自具有这种结构的 xlsx 文件:

标签: r excel sqldf


【解决方案1】:

我最终解决了这个问题,只需使用 gsub 替换 sql 查询后出现问题的字符,如下所示:

clear_errors <- function(table, campo){
table <- as.data.frame(table)
table[,campo] <- c(gsub("Ã'","Ñ",c(tabla_entrada[,campo])))
table[,campo]<- c(gsub("é","é",c(tabla_entrada[,campo])))
table[,campo]<- c(gsub("ó", "ó",c(tabla_entrada[,campo])))
table[,campo] <- c(gsub("ú","ú",c(tabla_entrada[,campo])))
table[,campo] <- c(gsub("ñ","ñ",c(tabla_entrada[,campo])))
table[,campo] <- c(gsub("Ã","í",c(tabla_entrada[,campo])))
table[,campo] <- c(gsub("O","A",c(tabla_entrada[,campo])))
return(table)

}

这不是最优雅的解决方案,但它确实有效。

我认为问题的发生是因为 xlsx 将字符格式化为因素,并且可能使用与 sqldf 不同的编码。如果有人能确切地知道发生了什么,我会非常感激(只是出于好奇)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多