我有一个数据框,格式如下:
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)
,或者一些能够起作用的东西。