r
  • excel
  • sqldf
  • 2016-11-08 93 views 1 likes 
    1

    我遇到了在R和特殊字符中運行sqldf的問題。R - 帶特殊字符的SQLDF問題

    這是我跑給你這是怎麼回事的想法代碼的一個小細節:

    首先,我從一個Excel工作表(使用的r XLSX包)看我的數據,該方法xlsx2似乎正確地獲取數據和人物似乎顯示特殊字符,例如「N」

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

    然後,我開始使用sqldf運行我的SQL查詢和結果表似乎取代N個字符爲」。以下是查詢:

    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") 
    

    任何人都可以幫我找到解決方案嗎?

    非常感謝您

    +0

    嘗試將'read.xlsx2'中的'encoding'設置爲「UTF-8」 – Batanichek

    +0

    不,它是一個自定義函數使用所需的列創建一個空的數據框,並且沒有數據。但是,這不是發生錯誤的地方 –

    +0

    更改編碼確實有效,但我不確定它是否解決了該問題。這是sqldf引入了錯誤 –

    回答

    0

    我結束了只需更換該使用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不同的編碼。如果有人可以確切地知道發生了什麼,我會非常感激(只是出於好奇)

    +0

    您可以使用此處給出的方法略微縮短此項:http://stackoverflow.com/questions/17517319/R-更換外國字符-IN-A-串 –

    相關問題