如何更正data.frame上的字符编码

时间:2015-12-16 16:35:15

标签: r encoding latin1

我有一个像这样的数据框:

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,因为我读到的效果比使用效率要高得多。我的想法是创建一个改变这些字母的函数:

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(matrix(c(1:5),ncol=5),2,change.names)

输出是一个包含5列的矩阵,每个列只改变一个字母,我不知道如何将rownames(data.names)分配给它们的“混合”,或者有效的东西。

1 个答案:

答案 0 :(得分:3)

您甚至不需要使用apply,因为for是一个向量,向量可以回收

var script = <<<SCR
    <script type="text/javascript">
            $( document ).ready(function() {
                console.log('test');
                window.GlobalVar = {show_table : "<tr><td>%.0f</td><td>%s</td><td>&#8364; %0.02f</td><td>&#8364; %0.02f</td><td><a href=''><img class='delete_task' src='/brugginkadmin/public_html/images//icons/delete.png' data-id='%s'></a></td><td><input type='checkbox' name='delete_query' value='%s'></td></tr>"};
            });
   </script>
SCR;
echo script;

有关编码的详细信息,请阅读此answer