R:将mpg trans列组合成包含两列的新数据帧

时间:2016-10-07 09:35:35

标签: r dataframe concatenation facet-wrap

我正在通过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列自动变速箱,两列是手动变速箱;我想要的只是两列,一个用于自动,一个用于手动,连接图。我目前不知道该怎么做,并希望得到所有的帮助。

如果缺少任何信息,应该采用不同的方式编写,或以其他方式进行改进,请提供建议。

我正在运行RStudio 0.99.902。我是R的新手。

1 个答案:

答案 0 :(得分:1)

您的数据中有两种以上的传输类型:

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对术语“正则表达式”也很有用。)

  2. 由于您正在阅读r4ds,因此您需要尽早熟悉dplyrtidyr和其他tidyverse软件包中使用的“管道运算符”。它可以以易读的方式将多个函数调用链接在一起。谷歌它或看看here。也可以在没有管道的情况下编写调用:

    mpg = mutate(mpg, trans2 = if_else(grepl("auto", trans), "auto", "manual"))
    
  3. 在这种特殊情况下,管道操作符实际上没那么有用。我已经习惯了,我自动去了。