r - 如何为数据框中的所有字符列声明编码?
问题描述
从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"))})
推荐阅读
- python - 我在 Python 中使用 EmailMessage 练习电子邮件
- r - 编程一个函数来显示飞镖游戏中可能的完成
- sql - 在 oracle sql 中使用 regexp_replace 标准化地址
- javascript - 错误:使用 toFixed() 无法将类型“字符串”分配给类型“数字”
- java - 如何在java中按字母顺序对列表进行排序?
- email - Gmail:电子邮件签名太长:少于 10,000 个字符
- javascript - v-for 中的 Vue Js 文本输入都返回相同的输入
- swift - 将字符串更改为代码文本的可能性?
- python - While 语句继续循环,即使它在技术上不应该是可能的
- javascript - 如何在字符串中找到最长的匹配字母序列?