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

Posted

技术标签:

【中文标题】在 R 中将 <f6> 更改为瑞典字符和相关的 ggplot geom_bar 问题【英文标题】:change <f6> to swedish charactors and related ggplot geom_bar issues in R 【发布时间】:2019-07-02 03:47:08 【问题描述】:

我有 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, 中的错误: “utf8towcs”中的无效输入“Göteborg”

如果我首先将这个 head(20) 放入变量 ci。然后使用 ggplot 绘制 ci

ggplot(ci,aes(x=reorder(kommun, sum_sales), y=sum_sales, 填充=因子(artikel_prioritet))) + geom_bar(stat='identity')+ coord_flip()+ scale_y_continuous(labels = comma)+ facet_grid(.~ 因子(artikel_prioritet),尺度 = “免费”)+ 主题(legend.position="none")

我有没有任何城市传说的条形图。 然后我打印出 ci,我得到的图片如下:

然后,我将 head(20) 写入 csv 'cityname.csv' 然后将 read.csv 写入 R 用同样的代码做条形图

ci

ggplot(ci,aes(x=reorder(kommun, sum_sales), y=sum_sales, 填充=因子(artikel_prioritet))) + geom_bar(stat='identity')+ coord_flip()+ scale_y_continuous(labels = comma)+ facet_grid(.~ 因子(artikel_prioritet),尺度 = “免费”)+ 主题(legend.position="none")

我得到的图片如下:

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

谢谢!

【问题讨论】:

【参考方案1】:

我相信您的问题是 R 不知道如何解释您的字符编码。尝试\u 表示法而不是&lt;&gt;,它表示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

【讨论】:

感谢您的评论,但很抱歉问,我如何才能将 首先更改为 \u 格式?有什么推荐吗? 好问题,我在答案中附加了一个解决方案。如果对您有帮助,请将其标记为已接受:-) 非常感谢。如果您也可以给我建议,我怎么能找到 "" = "\\u00f6" 。我想我在这里有 4 个不同的角色。现在只覆盖了其中的两个“”和“”。如果我用谷歌搜索,你建议我使用什么关键词?谢谢 &lt;f6&gt;这样的字符出现在您的数据中,您可以删除&lt;&gt;字符,然后在开头添加\u00。所以&lt;f6&gt; 变为\u00f6&lt;e5&gt; 变为\u00e5,而一个名为&lt;a1&gt; 的字符(我编造的)将变为\u00a1 非常感谢!

以上是关于在 R 中将 <f6> 更改为瑞典字符和相关的 ggplot geom_bar 问题的主要内容,如果未能解决你的问题,请参考以下文章

在文本区域中将新行更改为 <br>

如何在R中将变量'labeled'的类更改为string或chr?

在R闪亮中将fileinput进度条颜色更改为渐变

在导入的 .csv 中将字符串更改为浮点数

如何在 jQuery 中将 <select> 标签更改为 <input>

如何在 R 中将时间格式从 1730 更改为 17:30:00?