如何通过从两个向量

时间:2017-05-16 10:03:58

标签: r dplyr

我有以下函数返回一个tibble:


library(tidyverse)
process_data <- function(ky1 = "a", ky2 = "x") {

     l <- list( musician = c("John","Paul","George","Ringo"), 
                tools    = c("voice", "guitar", "bass", "drum")
                )
    df <- as.tibble(l) %>%
         mutate(first_key = ky1,second_key = ky2)
    return(df)
}

process_data()
#> # A tibble: 4 × 4
#>   musician  tools first_key second_key
#>      <chr>  <chr>     <chr>      <chr>
#> 1     John  voice         a          x
#> 2     Paul guitar         a          x
#> 3   George   bass         a          x
#> 4    Ringo   drum         a          x

给出两个向量

ky1_vec <- c("a","b","c")
ky2_vec <- c("w","x","y","z")

我想为所有组合获取一个数据框/ tibble 以上列表使用process_data()

 musician  tools first_key second_key
     John  voice         a          w
     Paul guitar         a          w
   George   bass         a          w
    Ringo   drum         a          w
     John  voice         a          x
     Paul guitar         a          x
   George   bass         a          x
    Ringo   drum         a          x
    ...    ...          ...       ...
     John  voice         c          z
     Paul guitar         c          z
   George   bass         c          z
    Ringo   drum         c          z
  # total 3 * 4 * 4 = 48 rows

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我们可以使用msg.payload

map2_df

或另一种选择是

library(tidyverse)
d1 <- crossing(ky1_vec, ky2_vec)
map2_df(d1$ky1_vec, d1$ky2_vec, process_data)

结果如下:

expand.grid(ky1_vec = ky1_vec, ky2_vec = ky2_vec) %>% 
      rowwise() %>% 
      do(data.frame(process_data(.$ky1_vec, .$ky2_vec)))