首页 > 解决方案 > 如何为数据框中的所有字符列声明编码?

问题描述

从Windows 机器上的包中加载数据,编码是拙劣的。

require(vegdata)
tax_dbf <- load.taxlist("GermanSL 1.3", detailed=TRUE)
tax_dbf[33,"BEGRUEND"]

[1] ""Einfügen einer Zwischenebene""

我可以解决这个问题:

Encoding(tax_dbf$BEGRUEND) <- "UTF-8"
tax_dbf[33,"BEGRUEND"]

[1] “Einfügen einer Zwischenebene”

但是,我没有找到一种简单的方法来为 df 中的所有字符列声明编码,而且我的 SO 搜索 foo 今天也很弱。这令人费解。

tidyverse 中的任何人都为我的散文写了单行字吗?

标签: rdataframeencodingcharacter-encodingnon-ascii-characters

解决方案


无需使用tidyverse. 只需遍历满足条件的列:

set.seed(1)

df <- data.frame(a = rep("Einfügen einer Zwischenebene", 5), b = runif(5), c = rep("Einfügen einer Zwischenebene", 5), stringsAsFactors = F)

cols <- names(df)

for(i in seq_along(cols)){

  if(!is.character(df[, cols[[i]]])) next

  Encoding(df[, cols[[i]]]) <- "UTF-8"

}

导致:

> df
                             a         b                            c
1 Einfügen einer Zwischenebene 0.2655087 Einfügen einer Zwischenebene
2 Einfügen einer Zwischenebene 0.3721239 Einfügen einer Zwischenebene
3 Einfügen einer Zwischenebene 0.5728534 Einfügen einer Zwischenebene
4 Einfügen einer Zwischenebene 0.9082078 Einfügen einer Zwischenebene
5 Einfügen einer Zwischenebene 0.2016819 Einfügen einer Zwischenebene

dplyr 解决方案

dplyr::mutate_if(df, is.character, .funs = function(x){return(`Encoding<-`(x, "UTF-8"))})

推荐阅读