【问题标题】:How to correct the encoding of characters on a data.frame如何更正 data.frame 上的字符编码
【发布时间】: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)

标签: r encoding latin1


【解决方案1】:

你甚至不需要使用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

请阅读此answer 了解有关编码的更多详细信息。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多