带有dplyr::mutate的purrr::pmap
我有一个函数,它接受多个输入并创建多个输出。例如:带有dplyr::mutate的purrr::pmap,r,dplyr,tidyverse,purrr,R,Dplyr,Tidyverse,Purrr,我有一个函数,它接受多个输入并创建多个输出。例如: example_fun = function(a,b){ x = a+b y = a-b return(list(x=x, y=y)) } 如何使用dplyr::mutate对数据帧的每一行计算此函数?转向 df = expand.grid(a=c(7,8), b=c(9,10)) df a b 1 7 9 2 8 9 3 7 10 4 8 10 进入 下面的代码几乎可以完成此任务: df = df %&
example_fun = function(a,b){
x = a+b
y = a-b
return(list(x=x, y=y))
}
如何使用dplyr::mutate对数据帧的每一行计算此函数?转向
df = expand.grid(a=c(7,8), b=c(9,10))
df
a b
1 7 9
2 8 9
3 7 10
4 8 10
进入
下面的代码几乎可以完成此任务:
df = df %>%
mutate(outputs = pmap(list(a,b), example_fun)) %>%
unnest()
df
a b outputs
1 7 9 16
2 7 9 -2
3 8 9 17
4 8 9 -1
5 7 10 17
6 7 10 -3
7 8 10 18
8 8 10 -2
稍微改变一下:
example_fun = function(a, b) {
x = a + b
y = a - b
return(data_frame(x = x, y = y)) #data_frame, not list
}
df <- data_frame(a = sample(1:5, 10, rep = TRUE), b = 11:20) #made my own test dataset
df %>%
mutate(outputs = map2(a, b, example_fun)) %>% #I use map2 rather than pmap
unnest()
稍微改变一下:
example_fun = function(a, b) {
x = a + b
y = a - b
return(data_frame(x = x, y = y)) #data_frame, not list
}
df <- data_frame(a = sample(1:5, 10, rep = TRUE), b = 11:20) #made my own test dataset
df %>%
mutate(outputs = map2(a, b, example_fun)) %>% #I use map2 rather than pmap
unnest()
我们可以使用pmap中的原始函数来实现这一点,方法是应用该函数以TIBLE形式获取输出,然后将_行与原始数据集绑定
df %>%
pmap_df(example_fun) %>%
bind_cols(df, .)
# a b x y
#1 7 9 16 -2
#2 8 9 17 -1
#3 7 10 17 -3
#4 8 10 18 -2
我们可以使用pmap中的原始函数来实现这一点,方法是应用该函数以TIBLE形式获取输出,然后将_行与原始数据集绑定
df %>%
pmap_df(example_fun) %>%
bind_cols(df, .)
# a b x y
#1 7 9 16 -2
#2 8 9 17 -1
#3 7 10 17 -3
#4 8 10 18 -2