我有以下函数返回一个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
我该怎么做?
答案 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)))