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是一个很好的解决方法.
或者,您可以使用%$%from运算符magrittr来直接访问数据框的列。例如:
iris %$%
plot(Sepal.Length~Sepal.Width)
Run Code Online (Sandbox Code Playgroud)
这是有用的很多时候需要将结果馈送dplyr链的基础R的功能(如table,lm,plot等)。它也可以用于从数据帧中提取列作为向量,例如:
iris %>% filter(Species=='virginica') %$% Sepal.Length
这与:
iris %>% filter(Species=='virginica') %>% pull(Sepal.Length)