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

sad*_*eem 7 plot r piping dplyr

我是dplyr()包的新手,并尝试将其用于我的可视化分配.我能够将数据传输到ggplot()但无法用plot()进行管道传输.我发现这篇文章,答案包括评论中的答案,对我来说不起作用.

代码1:

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

emission %>%
    plot(year, total,.)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error in plot(year, total, emission) : object 'year' not found
Run Code Online (Sandbox Code Playgroud)

代码2:

mynei %>%
    select(Emissions, year) %>%
    group_by(year) %>%
    summarise (total=sum(Emissions))%>%
    plot(year, total, .)
Run Code Online (Sandbox Code Playgroud)

这也不起作用并返回相同的错误.

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

我错过了什么吗?

Gre*_*gor 14

plot.default没有数据参数,所以你最好的选择是管道with:

mynei %>%
    select(Emissions, year) %>%
    group_by(year) %>%
    summarise (total=sum(Emissions))%>%
    with(plot(year, total))
Run Code Online (Sandbox Code Playgroud)

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

... %>%
  plot(total ~ year, data = .)
Run Code Online (Sandbox Code Playgroud)

当然,ggplot需要data作为第一个参数,所以用ggplot做:

... %>%
  ggplot(aes(x = year, y = total)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

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

... %>% 
  xyplot(total ~ year, data = .)
Run Code Online (Sandbox Code Playgroud)

只需查看文档并确保使用.if data不是第一个参数.如果没有任何data争论,使用with是一个很好的解决方法.


Vla*_* C. 5

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

iris %$%
  plot(Sepal.Length~Sepal.Width)
Run Code Online (Sandbox Code Playgroud)

这是有用的很多时候需要将结果馈送dplyr链的基础R的功能(如tablelmplot等)。它也可以用于从数据帧中提取列作为向量,例如:

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

这与:

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