Reputation: 440
Loading data from a package on a windows machine, encoding is botched.
require(vegdata)
tax_dbf <- load.taxlist("GermanSL 1.3", detailed=TRUE)
tax_dbf[33,"BEGRUEND"]
[1] " "Einfügen einer Zwischenebene""
I can fix that:
Encoding(tax_dbf$BEGRUEND) <- "UTF-8"
tax_dbf[33,"BEGRUEND"]
[1] "Einfügen einer Zwischenebene"
However, I didn't manage to find an easy way to declare encoding for all character columns in the df, and my SO search foo is weak today as well. This is confuddling.
Anyone from the tidyverse having a oneliner for my prose?
Upvotes: 2
Views: 3109
Reputation: 1718
No need to use tidyverse
. Just loop over columns that satisfy the condition:
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"
}
Resulting in:
> 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::mutate_if(df, is.character, .funs = function(x){return(`Encoding<-`(x, "UTF-8"))})
Upvotes: 5