2017-10-12 74 views
1

我写了一个函数来加入字符串。它包括将非英文字符转换为英文字符和其他操作。字符串不改变,但改变了masquareding

trim <- function (x) gsub("^\\s+|\\s+$", "", x) 

library(qdapRegex) 

wrangle_string <- function(s) { 
    # 1 character substitutions 
    old1 <- "šžþàáâãäåçèéêëìíîïðñòóôõöùúûüýşğçıöüŞĞÇİÖÜ" 
    new1 <- "szyaaaaaaceeeeiiiidnooooouuuuysgciouSGCIOU" 
    s1 <- chartr(old1, new1, s) 
    # 2 character substitutions 
    old2 <- c("œ", "ß", "æ", "ø") 
    new2 <- c("oe", "ss", "ae", "oe") 
    s2 <- s1 
    for(i in seq_along(old2)) s2 <- gsub(old2[i], new2[i], s2, fixed = TRUE) 
    s2 
    #diger donusumlar 
    s2= gsub('[[:punct:] ]+',' ',s2) 
    s2=tolower(s2) 
    s2=trim(s2) 
    s2=rm_white(s2) 
    return(s2) 
} 

这是我最小的数据复制:

outgoing=structure(list(source = structure(c(1L, 1L, 1L), .Label = "YÖNETIM KURULU BASKANLIGI", class = "factor"), 
    target = structure(c(2L, 1L, 3L), .Label = c("x Yayincilik Reklam ve Organizasyon Hizmetleri", 
    "Suat", "Yavuz"), class = "factor")), .Names = c("source", 
"target"), row.names = c(NA, 3L), class = "data.frame") 

的事情是,当我调用该函数直接它的工作原理。

wrangle_string("YÖNETİM KURULU BAŞKANLIĞI") 

结果是:

"yonetim kurulu baskanligi" 

当我使用它apply功能,它看起来像一个工作数据帧时,我与View(outgoing)功能检查也没有问题。

outgoing$source=as.vector(sapply(outgoing$source,wrangle_string)) 

然而,当我检查细胞与outgoing[1,1]我得到这个:

"yonetİm kurulu başkanliği" 

我怎样才能解决这个问题呢?

+0

东西看起来不正确,请尝试创建一个我们可以运行并看到相同结果的[可重现示例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。你确定“来源”是第一列吗? – MrFlick

+0

我将最小数据添加到了复制中。 –

+0

我无法用您提供的数据重现问题。如预期的那样,即将离任的[1,1]'返回''yonetim kurulu baskanligi''。 – MrFlick

回答

0

MrFlick的帮助和指导下,我找到了答案。问题源于本地语言设置。 R是英文的,但我的数据包括土耳其文字。为了解决这个问题,我执行此命令:

Sys.setlocale("LC_CTYPE", "turkish") 

,也是我加入适当编码参数,以我的导入CSV功能象下面这样:

outgoing <- read_delim("ebys_gidenevrak_rapor.csv", ";", escape_double = FALSE, col_names = FALSE, trim_ws = TRUE,locale = locale(encoding = "utf-8"))