在group_walk()

时间:2019-03-29 16:51:53

标签: r dplyr

我一直在使用group_walk()绘制dplyr管道内数据帧的分割部分的图。这一直很好,但是我不知道如何为每个拆分部分添加多个功能。

我有一个数据框

df = data.frame(x = rep(rnorm(5),5), y = rep(rnorm(5),5), col = rep(c(1:5),5), 
                lab = rep(c('a','b','c','d','e'),5),
                section = c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5)))
##group_walk plotting
df %>% 
  group_by(section) %>%
  group_walk(~ plot(.x$y~.x$x, col = .x$col))

我要添加的是group_walk中的第二个函数,用于向每个子图添加图例,如下所示:

df %>% 
  group_by(section) %>%
  group_walk(~ plot(.x$y~.x$x, col = .x$col),
             ~ legend('bottomright',col = .x$col, legend = .x$lab))

但是我不知道什么是合适的语法。我更喜欢在dplyr管道中工作,而不是回到for循环。有没有办法做到这一点,或者group_walk不支持对数据的每个部分进行多个函数调用?

1 个答案:

答案 0 :(得分:2)

该选项是使用花括号({})将其保持为单个块

library(tidyverse)
df %>% 
 group_by(section)  %>% 
 group_walk(~ {
    plot(.x$y ~ .x$x, col = .x$col)
    legend('bottomright', col = .x$col, legend = .x$lab)
  })

enter image description here


请注意,在公式中,如果我们指定data作为参数,则可以传递列名,这也会删除绘图轴标题中的.x$

df %>%
    group_by(section)  %>% 
    group_walk(~ {
        plot(y ~ x, col = col, data = .x)
        legend('bottomright', col = .x$col, legend = .x$lab)
   })