如何纠正数据框中字符的编码问题

3

我有一个数据框,格式如下:

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

我希望将不正确的字母替换为正确的字母(Á、É、Í等)。请明确表明我想使用apply,因为我读到它比for更有效率。我的想法是创建一个可以更改这些字母的函数:
letters1<-c("\xc1","\xc9","\xcd","\xd3", "\xd1") #Á,É,Í,Ó,Ñ
letters2<-c("Á","É","Í","Ó","Ñ")
change.names <- function(x){sub(letters1[x], letters2[x],rownames(data.names))}

现在,对于我来说,使用for循环没有任何问题:
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来实现。我尝试过:

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

输出是一个5列的矩阵,其中每列仅改变一个字母,我不知道如何将它们分配给rownames(data.names),或者一些能够起作用的东西。


1
rownames(data.names)<-sub(letters1, letters2,rownames(data.names)) 这个对我来说很有效,不需要循环。 - Zfunk
1个回答

4

您甚至不需要使用apply,因为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

请阅读此答案,了解更多有关编码的细节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接