【问题标题】:Fixing r sorting values method修复 r 排序值方法
【发布时间】:2020-01-03 03:00:53
【问题描述】:

我正在尝试在 ggplot 中制作图表,但 R 有一种愚蠢的排序方法。它不是制作最大的数字,而是按第一个数字 1-9 排序,例如 100k 低于 2。有人可以告诉我如何解决这个问题吗?

    ggplot(AWD,aes(nationality, discipline, size = money)) + 
    geom_point() + 
    theme(text = element_text(size=25),axis.text.x = element_text(angle=90, 
    hjust=1, vjust=0.4))+
    labs(title = "Roznica w wielkosci zarobkow sportowcow roznych dziedzin 
    dla kazdego panstwa", x="Reprezentowane panstwo", y="Rodzaj sportu", 
    fill="Poziom zarobow") 

这是可重现的示例:

AWD <- data.frame(name = c("Aaron Donald", "Aaron Rodgers", "Albert Pujols", "Alexis SA¡nchez"),
                  nationality = c("Argentyna", "Brazylia", "Chile", "Dominikana"),
                  discipline = c("Baseball", "Boks", "Formula 1", "Futbol amerykanski"),
                  money = c("41,400,000", "89,300,000", "100,000,000", "30,700,000")) 
AWD$money <- as.factor(AWD$money)

编辑:

我冒昧地减少了可重现的示例代码并重命名了几个变量。生成的 data.frame 与原始的相同有一个例外,代码更具可读性。它也不会弄乱我的 RStudio 布局。

例外是添加一个值来说明 ggplot 显示因子时发生的问题。

重命名主要是因为我不会说波兰语。每次正确编写使用的变量都需要时间。我将很快提供答案,它应该可以按原样使用此编辑。否则将需要一些小的调整。

【问题讨论】:

  • 那是因为你的变量被作为一个因素。尝试删除as.factor 看看是否能解决问题。
  • 这并不愚蠢,只是没有读懂你的想法。你还没有做任何事情可以按计数排序。将大小作为一个因素似乎是一个奇怪的选择——你不希望它成为一个连续变量吗?为了提供更多帮助,我们需要查看reproducible example
  • 我删除了 as.factor,它什么也没改变,图表看起来完全一样。
  • 我喜欢人们不喜欢的方式,但不会告诉你如何解决你的问题 ehhh
  • 有人知道如何帮助我吗?

标签: r ggplot2


【解决方案1】:

观察到行为的原因是因子水平作为字符串处理。因此,排序是按字母顺序进行的。这导致“100”按升序排在“99”之前。

解决方法有点棘手,我使用 stringr 包来更轻松地操作字符串。其余的是纯 R。如果您不介意额外的依赖项,则 dplyr 或类似包可能会更优雅。

由于我的编辑还不可见,这里是我用作基线的数据:

    AWD <- data.frame(
                  name = c("Aaron Donald", "Aaron Rodgers", "Albert Pujols", "Alexis SA¡nchez"),
                  nationality = c("Argentyna", "Brazylia", "Chile", "Dominikana"),
                  discipline = c("Baseball", "Boks", "Formula 1", "Futbol amerykanski"),
                  money = c("41,400,000", "89,300,000", "100,000,000", "30,700,000")) 
    AWD$money <- as.factor(AWD$money)

解决办法是这样的:

    newOrder <- order(as.numeric(str_replace_all(levels(AWD$money), ",","")))
    levels(AWD$money) <- levels(AWD$money)[newOrder]

str_replace_all 是必要的,因为 R as.numeric 不喜欢原始值中的逗号。 在此之后,情节应该按预期工作。

旁注: 使用原始的可重现示例很痛苦。下次请尝试将代码减少到最低限度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多