【问题标题】:applying a function to the output of dplyr's group_by将函数应用于 dplyr 的 group_by 的输出
【发布时间】:2015-02-17 20:06:54
【问题描述】:

我想对一个大型数据框进行子集化,并为每个分组创建一个 ggplot。听起来像是 dplyr 的完美候选人,但我在调用 group_by 结果上的函数时遇到了问题。任何提示将不胜感激。

# what I want to do using base functions: "groupby" the elements in a column 
# and create/save a plot for each group
for (i in levels(iris$Species)){
  df = iris[iris$Species == i,]
  p <- ggplot(df, aes(x=Sepal.Length, y=Sepal.Width) + geom_point())
  ggsave(p, filename=paste(i,".pdf",sep=""))
}

# I'm trying to get something like this using dplyr
library(dplyr)
iris %>%
  group_by(Species) %>%
  do({
      p <- ggplot(., aes(x=Sepal.Length, y=Sepal.Width) + geom_point())
      ggsave(p, filename=paste(quote(Species),".pdf",sep=""))
     })

【问题讨论】:

  • 您说您“遇到了问题”。这些问题究竟是什么?如果您提供确切的问题/错误消息,会更有帮助。

标签: r ggplot2 dplyr


【解决方案1】:

嗯,你有一个括号问题和一个文件命名问题,所以也许它是你所指的问题之一。我假设

iris %>%
  group_by(Species) %>%
  do({
      p <- ggplot(., aes(x=Sepal.Length, y=Sepal.Width)) + geom_point()
      ggsave(p, filename=paste0(unique(.$Species),".pdf"))
     })

会解决你的问题。

【讨论】:

  • 为什么不使用paste0 而不是paste
  • @zipp。好点子。我只是复制了OP的代码。固定的。 (虽然真的与sep="" 他们是等价的)
  • 感谢@MrFlick。看起来我把名字弄错了。
猜你喜欢
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 2018-05-12
  • 2015-11-18
相关资源
最近更新 更多