【发布时间】:2016-03-22 21:38:14
【问题描述】:
我有一个这样的数据框:
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 因为我读到 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)。
【问题讨论】:
-
rownames(data.names)