менятьна шведских символов и связанных с ними проблем ggplot geom_bar в R - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть 2 проблемы, связанные со шведскими персонажами.Я получаю данные непосредственно из базы данных MS SQL.1. Может ли кто-нибудь дать мне подсказку, как я могу изменить обратно на шведские символы в R?

Я использую write.csv, записываю данные в csv, затем копирую и вставляю эти строки сюда, чтобы сделать df следующим образом

library(tidyverse)
library(ggplot2)
library(scales)

c <- c("c","u","m","j","c","u","m","j","c","u","m","j")
city <- c("G<f6>teborg", "Ume<e5>", "Malm<f6>", "J<f6>nk<f6>ping","G<f6>teborg", "Ume<e5>", "Malm<f6>", "J<f6>nk<f6>ping","G<f6>teborg", "Ume<e5>", "Malm<f6>", "J<f6>nk<f6>ping")
priority <- c(1,1,1,1,0,0,0,0,2,3,3,2)
n_cust <- sample(50:1000, 12, replace=T)
df <- data.frame(c,city,priority,n_cust)

должно быть ö и å

достаточно интересно.если я использую код следующим образом:
dpri %>% group_by(kommun, artikel_prioritet) %>% 
  summarise(n_cust=n_distinct(kund_id),
            sum_sales=sum(p_sum_adj_sale),
            avg_margin=mean(pp_avg_margin),
            avg_pec_sales=mean(p_pec_sales)) %>% 
  arrange(desc(sum_sales)) %>% 
  head(20)%>% 
  ggplot(aes(x=reorder(kommun, sum_sales), y=sum_sales, 
  fill=factor(artikel_prioritet))) +
  geom_bar(stat='identity')+
  coord_flip()+
  scale_y_continuous(labels = comma)+
  facet_grid(.~ factor(artikel_prioritet), scales = "free")+
  theme(legend.position="none")

я получил эту ошибку: Ошибка в grid.Call (C_textBounds, as.graphicsAnnot (x $ label), x $x, x $ y,: недопустимый ввод 'Göteborg' в 'utf8towcs'

, если я сначала помещу эту голову (20) в переменную ci, а затем использую ggplot для построения ci

ggplot (ci, aes (x = переупорядочить (kommun, sum_sales), y = sum_sales, fill = factor (artikel_prioritet))) + geom_bar (stat = 'identity') +
ordin_flip () + scale_y_continuous (метки = запятая) + facet_grid (. ~ factor (artikel_prioritet), scale = "free") +
theme (legend.position = "none")

У меня есть гистограмма без легенды города. ТогдаЯ распечатываю ci, я получаю фото следующим образом: enter image description here

, затем я записываю голову (20) в csv 'cityname.csv', затем читаю.csv обратно в Rиспользуйте тот же код для построения гистограммы

ci <- read.csv ("cityname.csv") </p>

ggplot (ci, aes (x = reorder (kommun, sum_sales)), y = sum_sales, fill = factor (artikel_prioritet))) + geom_bar (stat = 'identity ') +
ordin_flip () + scale_y_continuous (метки = запятая) + facet_grid (. ~ factor (artikel_prioritet), scale = "free") +
тема (legend.position = "none")

Я получил фото следующим образом: enter image description here

мы можем видеть легенды на этот раз, но видите, на этот раз.надеюсь получить несколько советов, как я могу исправить строки на шведском языке, и интересно, есть ли другой способ без write.csv, а затем снова прочитать, все еще можно исправить гистограмму?

Спасибо!

1 Ответ

0 голосов
/ 19 апреля 2019

Я считаю, что ваша проблема в том, что R не знает, как интерпретировать кодировку вашего символа.Попробуйте \u нотацию вместо <>, которая обозначает кодировку UTF-8 в R

> city <- c("G\u00f6teborg", "Ume\u00e5", "Malm\u00f6", "J\u00f6nk\u00f6ping","G\u00f6teborg", "Ume\u00e5", "Malm\u00f6", "J\u00f6nk\u00f6ping","G\u00f6teborg", "Ume\u00f6", "Malm\u00f6", "J\u00f6nk\u00f6ping")
> Encoding(city)
 [1] "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8" "UTF-8"
> head(city)
[1] "Göteborg"  "Umeå"      "Malmö"     "Jönköping" "Göteborg"  "Umeå" 

РЕДАКТИРОВАТЬ: Вы задали хороший дополнительный вопрос о том, как сделать эту замену программно.Ниже я предоставил решение для этого, используя tidyverse пакеты dplyr и stringr

> city <- c("G<f6>teborg", "Ume<e5>", "Malm<f6>", "J<f6>nk<f6>ping","G<f6>teborg", "Ume<e5>", "Malm<f6>", "J<f6>nk<f6>ping","G<f6>teborg", "Ume<f6>", "Malm<f6>", "J<f6>nk<f6>ping")
> city_df <- as.data.frame(city)

> special_character_replacements <- c("<f6>" = "\\u00f6", "<e5>" = "\\u00e5")
> city_df %>% 
    dplyr::mutate(city_fixed = 
        stringr::str_replace_all(city, special_character_replacements))

              city city_fixed
1      G<f6>teborg   Göteborg
2          Ume<e5>       Umeå
3         Malm<f6>      Malmö
4  J<f6>nk<f6>ping  Jönköping
5      G<f6>teborg   Göteborg
6          Ume<e5>       Umeå
7         Malm<f6>      Malmö
8  J<f6>nk<f6>ping  Jönköping
9      G<f6>teborg   Göteborg
10         Ume<f6>       Umeö
11        Malm<f6>      Malmö
12 J<f6>nk<f6>ping  Jönköping
...