R:将 mpg trans 列合并到包含两列的新数据框中

R: combine mpg trans columns into new dataframe containing two columns

我正在努力完成 R for Data Science Manual,目前正在完成第 3 章。我正在尝试找到一种方法来生成一个将不同类型的自动和手动变速器组合成两个图的方法,而不是什么我目前有:

# Install necessary packages
install.packages("tidyverse")
library(tidyverse)

# Create the plot
fuelbytrans <- ggplot(data = mpg) +
  geom_jitter(
    mapping = aes(x = displ, y = hwy, colour = fl),
    size = 0.75) +
  # Change labels for title and x and y axes
  labs(
    title = "Drivstofforbruk iht. datasettet «mpg» fordelt på girkasse og motorvolum",
    x = "Motorvolum",
    y = "Am. mil per gallon")

# Run it
fuelbytrans



# Set colours and labels for fuel legend and position it on the bottom
# e (etanol), d (diesel), r (regular [bensin, lavoktan]), p (premium [bensin, høyoktan]),
# c (CNG)
cols <- c( #kilde: http://colorbrewer2.org/#type=diverging&scheme=PRGn&n=5
  "c" = "yellow",
  "d" = "red",
  "e" = "black",
  "p" = "blue",
  "r" = "darkgreen"
)
labels_fuel <- fuelbytrans +
scale_colour_manual(
    name = "Drivstoff",
    values = cols,
    breaks = c("c", "d", "e", "p", "r"),
    labels = c("CNG",
               "diesel",
               "etanol",
               "bensin,\nhøyoktan",
               "bensin,\nlavoktan")) +
  theme(legend.position = "bottom",
        legend.background = element_rect(
          fill = "gray90",
          size = 2,
          linetype = "dotted"
        ))

# Run it
labels_fuel



# Wrap by transmission type
labels_fuel + facet_wrap(~ trans, nrow = 1)

如你所见,我得到的是8列自动档,2列手动档;我想要的只是两列,一列用于自动,一列用于手动,连接图。我目前不知道该怎么做,希望得到大家的帮助。

如有遗漏,应该改写,或有待改进之处,请指教。

我是 运行 RStudio 0.99.902。我对 R 很陌生。

您的数据传输类型超过 2 种:

table(mpg$trans)

# auto(av)   auto(l3)   auto(l4)   auto(l5)   auto(l6) 
#        5          2         83         39          6 
# auto(s4)   auto(s5)   auto(s6) manual(m5) manual(m6) 
#        3          3         16         58         19

您需要先将他们分成两组,这里有一个选项:

mpg = mpg %>% 
  mutate(trans2 = if_else(grepl("auto", trans), "auto", "manual"))

table(mpg$trans2)

# auto manual 
# 157     77

然后,使用新的trans2变量进行分面(您需要重新运行绘图)。

另外两条评论:

  1. 如果您想了解有关 R 函数的更多信息,请在 R 中调用 ?function_name。这将打开该函数的帮助页面。它通常包含示例,您可以从 R 运行 中查看它的实际操作。 (此外,我们在这里使用 grepl,因此如果您不熟悉 Google 术语 "regular expressions" 也很有用)。

  2. 既然你正在阅读r4ds,你需要尽快熟悉dplyrtidyr和其他tidyverse包中使用的"pipe operator"而不是以后。它可以以一种易于阅读的方式将多个函数调用链接在一起。 Google 还是看看here。也可以在没有管道的情况下编写调用,如下所示:

    mpg = mutate(mpg, trans2 = if_else(grepl("auto", trans), "auto", "manual"))
    

在这种特殊情况下,管道运算符实际上没有那么有用。我只是太习惯了,我自动地去了。