Как объявить кодировку для всех столбцов символов во фрейме данных? - PullRequest
0 голосов
/ 16 января 2019

Загрузка данных из пакета на машине с Windows , кодировка не выполняется.

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

[1] "" Эйнфюген Эйнер Цвишенбене ""

Я могу это исправить:

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

[1] "Einfügen einer Zwischenebene"

Однако мне не удалось найти простой способ объявить кодировку для всех символьных столбцов в df, и мой поиск SO foo также слаб сегодня. Это до смешного.

У кого-нибудь из тидиверса есть лайнер для моей прозы?

1 Ответ

0 голосов
/ 16 января 2019

Не нужно использовать 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"))})
...