将 <f6> 更改为瑞典字符和 R 中的相关 ggplot geom_bar 问题

change <f6> to swedish charactors and related ggplot geom_bar issues in R

我有 2 个与瑞典字符相关的问题。我直接从 MS SQL 数据库中获取数据。 1.could 谁能给我一个提示,我怎样才能在 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)

应该是 ö 是 å

  1. 足够有趣。如果我使用如下代码:
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, 错误: 'utf8towcs'

中的无效输入 'Göteborg'

如果我先把这个 head(20) 放到一个变量中 ci。然后使用 ggplot 绘制 ci

ggplot(ci,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")

我有没有任何 city 图例的条形图。 然后我打印出来ci,我得到的图片如下:

然后,我将 head(20) 写入 csv 'cityname.csv' 然后 read.csv 返回到 R 使用相同的代码来制作条形图

ci <- read.csv("cityname.csv")

ggplot(ci,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")

我得到的图片如下:

这次我们可以看到传说,但是看到,这次。 希望得到一些建议我如何修复瑞典语的字符串并且想知道是否有没有其他方法没有 write.csv 然后再次阅读仍然可以修复条形图?

谢谢!

我认为您的问题是 R 不知道如何解释您的字符编码。尝试 \u 表示法而不是 <>,它表示 R

中的 UTF-8 编码
> 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å" 

编辑: 您问了一个关于如何以编程方式进行替换的很好的后续问题。我在下面也提供了解决方案,使用 tidyversedplyrstringr

> 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