2012-07-06 25 views
7

Bir RK'nin gayet iyi okuduğu bir CSV'de yabancı ülkelerden bir sürü yazar ismim var. Mekanik Türk'e yüklemek için onları temizlemeye çalışıyorum (ki bu gerçekten tek bir uluslararası karakterden bile hoşlanmıyor). Bunu yaparken, bir sorum (daha sonra yayımlanacaktır) var, ama ben bile dput onları mantıklı bir şekilde olamaz: başarısız Başka bir deyişleUluslararasılaştırılmış metin nasıl doğru şekilde verilir?

> dput(df[306,"primauthfirstname"]) 
"Gwena\xeblle M" 
> test <- "Gwena\xeblle M" 
<simpleError in nchar(val): invalid multibyte string 1> 

, dput inşaat iyi ama sonuç yapıştırarak içinde . Neden dput, R'ye yeniden kopyalamaya/yapıştırmaya izin vermek için gerekli bilgileri verir (muhtemelen tüm yapması gereken kodlama niteliklerini yapı ifadesine ekler?). Bunu nasıl yapacağım? \xeb geçerli bir karakter kadarıyla R söz konusu olduğunda olduğuna

Not:

> gsub("\xeb","", turk.df[306,"primauthfirstname"]) 
[1] "Gwenalle M" 

Ama tek tek karakterleri değerlendirmek olamaz - bu altıgen kod \ x ## ya da hiçbir şey:

> gsub("\\x","", turk.df[306,"primauthfirstname"]) 
[1] "Gwena\xeblle M" 
+3

Bu benim için iyi çalışıyor: '(test <-" Gwena \ xeblle M ")' verim [1] "Gwenaëlle M" '. R 2.14.0'ı LANG = en_US.UTF-8' ile kullanıyorum. –

+0

@MichaelHoffman "LANG" parçası nedir? Nasıl kontrol ederim? –

+0

Bu bir ortam değişkeni. Sys.getenv ("LANG") 'yi deneyin. Hangi R sürümünü kullanıyorsunuz? –

cevap

1

dput() 'un helppage'i şöyle diyor: "Bir R nesnesinin ASCII metin gösterimini yazıyor". Yani, nesneniz ASCII olmayan karakterler içeriyorsa, bunlar temsil edilemez ve bir şekilde dönüştürülmelidir.

dput ing ürününüzünüzü dönüştürmek için iconv() kullanmanızı öneririm. Bir yaklaşımdır: Gördüğünüz gibi, her iki yönde çalışır,

> test <- "Gwena\xeblle M" 
> out <- iconv(test, from="latin1", to="ASCII", sub="byte") 
> out 
[1] "Gwena<eb>lle M" 
> gsub('<eb>', 'ë', out) 
[1] "Gwenaëlle M" 

. Daha sonra, byte'ları karakterlere geri dönüştürmek için gsub()'u kullanabilirsiniz (kodlamanız destekliyorsa, örneğin utf-8).

İkinci yaklaşım daha basit (ve ben ihtiyaçlarınız için tercih tahmin), ancak tek yönlü çalışır ve libiconv bunu desteklemiyor olabilir: Bu yardımcı olur

> test <- "Gwena\xeblle M" 
> iconv(test, from="latin1", to="ASCII//TRANSLIT") 
[1] "Gwenaelle M" 

Umut!

İlgili konular