r - 如何声明数据框中所有字符列的编码?

标签 r dataframe encoding character-encoding non-ascii-characters

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 的人有我的散文的单行吗?

最佳答案

无需使用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"))})

关于r - 如何声明数据框中所有字符列的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54221280/

相关文章:

python - 使用 Pandas 连接 CSV 文件会导致重复

python - 如何在pandas groupby对象中使用IF NOT IN?

ruby - 使用 Ruby 在多个操作系统中读取文件名而没有编码问题

java - AsyncRestTemplate '#' 查询参数中的符号编码

r - ggplot2 条形图和线图的叠加

dataframe - 从每日数据的 DataFrame 绘制每周数据

r - 如何在r中执行printf?

php - ASCII 编码字符串的问题 - PHP

r - 创建具有不同比例的累积分布曲线 (ECDF) 的 ggplot2 直方图

根据数据框中行中的条件删除重复项