使用dplyr,如何管道或链接到plot()?

时间:2014-11-14 23:32:26

标签: r plot dplyr piping

我是dplyr()包的新手,并尝试将其用于我的可视化分配。我可以将数据传输到 ggplot(),但无法使用 plot()执行此操作。我遇到了this post,答案包括评论中的答案,对我来说并不起作用。

代码1:

emission <- mynei %>%
    select(Emissions, year) %>%
    group_by(year) %>%
    summarise (total=sum(Emissions))

emission %>%
    plot(year, total,.)

我收到以下错误:

Error in plot(year, total, emission) : object 'year' not found

代码2:

mynei %>%
    select(Emissions, year) %>%
    group_by(year) %>%
    summarise (total=sum(Emissions))%>%
    plot(year, total, .)

这也没有工作,并返回相同的错误。

有趣的是,我提到的帖子的解决方案适用于同一个数据集但不能解决我自己的数据。但是,我可以使用排放$ year 排放$ total 创建图表。

我错过了什么吗?

2 个答案:

答案 0 :(得分:11)

plot.default不接受数据参数,所以最好的办法就是输入with

mynei %>%
    select(Emissions, year) %>%
    group_by(year) %>%
    summarise (total=sum(Emissions))%>%
    with(plot(year, total))

如果有人错过了@ aosmith对该问题的评论,plot.formula 确实有数据参数,但当然formula是第一个参数,所以我们需要使用.将数据放在正确的位置。所以另一种选择是

... %>%
  plot(total ~ year, data = .)

当然,ggplotdata作为第一个参数,因此要使用ggplot来执行:

... %>%
  ggplot(aes(x = year, y = total)) + geom_point()

lattice::xyplot就像plot.formula:有一个数据参数,但它不是第一个,所以:

... %>% 
  xyplot(total ~ year, data = .)

如果.不是第一个参数,请查看文档并确保使用data。如果根本没有data参数,使用with是一个很好的解决方法。

答案 1 :(得分:3)

或者,您可以使用%$%中的magrittr运算符来直接访问数据框的列。例如:

iris %$%
  plot(Sepal.Length~Sepal.Width)

当您需要将dplyr链的结果提供给基本R函数(例如tablelmplot等)时,这很有用)。它也可以用于从数据帧中提取列作为矢量,例如:

iris %>% filter(Species=='virginica') %$% Sepal.Length

这与:

iris %>% filter(Species=='virginica') %>% pull(Sepal.Length)