我是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 创建图表。
我错过了什么吗?
答案 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 = .)
当然,ggplot
将data
作为第一个参数,因此要使用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函数(例如table
,lm
,plot
等)时,这很有用)。它也可以用于从数据帧中提取列作为矢量,例如:
iris %>% filter(Species=='virginica') %$% Sepal.Length
这与:
iris %>% filter(Species=='virginica') %>% pull(Sepal.Length)