2015-12-16 3 views
1

У меня есть кадр данных сделать так:Как исправить кодировку символов на data.frame

data.names<-data.frame(DATA=c(1:5)) 
rownames(data.names)<-c("IV\xc1N","JOS\xc9","LUC\xcdA","RAM\xd3N","TO\xd1O") 
data.names 
#   DATA 
# IV\xc1N  1 
# JOS\xc9  2 
# LUC\xcdA 3 
# RAM\xd3N 4 
# TO\xd1O  5 

Я хочу неправильные буквы заменить правильными (A, E, I, .. .). Поясните, что я хочу использовать, потому что я читаю, что это гораздо эффективнее, чем для. Моя идея сделать функцию, которая изменяет эти буквы:

letters1<-c("\xc1","\xc9","\xcd","\xd3", "\xd1") #Á,É,Í,Ó,Ñ 
letters2<-c("Á","É","Í","Ó","Ñ") 
change.names <- function(x){sub(letters1[x], letters2[x],rownames(data.names))} 

Теперь с для меня нет никаких проблем:

for(i in 1:5) rownames(data.names)<-change.names(i) 
data.names 
#  DATA 
# IVÁN  1 
# JOSÉ  2 
# LUCÍA 3 
# RAMÓN 4 
# TOÑO  5 

Но я не так много знаю, как сделать это с подать заявление. Я пробовал:

apply(matrix(c(1:5),ncol=5),2,change.names) 

И выход представляет собой матрицу с 5 столбцов, где каждый из них только меняет одну букву, и я не могу знать, как назначить rownames(data.names) «микс» из них, или что-то, что работает.

+1

rownames (data.names) <- sub (буквы1, letters2, rownames (data.names)), похоже, работает для меня без необходимости в цикле – Zfunk

ответ

2

Вам даже не нужно использовать применять, потому что rownames(data.names) вектор и векторы могут быть переработаны

> Encoding(rownames(data.names)) <- 'latin1' 
> data.names 
     DATA 
IVÁN  1 
JOSÉ  2 
LUCÍA  3 
RAMÓN  4 
TOÑO  5 

Пожалуйста, прочитайте это answer для получения более подробной информации о кодировании.

Смежные вопросы