将函数应用于每个条目一个表到另一个表的每个条目

问题描述 投票:1回答:1

我想将一个函数bandedlossfn应用于loss.tib中的所有条目,使用bandstib中的每个项目

library(tidyverse)
set.seed(1)
n <- 5
loss <- rbeta(n, 1, 10) * 100

loss.tib <- loss %>% as_tibble %>% mutate(loss = value) %>% mutate(lossid = 
row_number()) %>% select(lossid, loss)
bandstib <- tibble(bandid = seq(4),
                   start = seq(0, 75, by = 25),
                   end = seq(25, 100, by = 25))

bandedlossfn <- function(loss, start, end) {
  pmin(end - start, pmax(0, loss - start))
} 

根据下面的答案,以下代码生成计算:

loss.tib %>% 
mutate(
  result = map(
    loss, ~ tibble(result = bandedlossfn(.x, bandstib$start, bandstib$end))
    )
    ) %>% unnest

但是我想在地图函数中包含bandid作为索引,另外还有filter(!near(result,0))和map函数。

结果应该是:

lossid  loss    bandid  result
1   21.6691088  1   21.6691088  
2   6.9390647   1   6.9390647   
3   0.5822383   1   0.5822383   
4   5.5671643   1   5.5671643   
5   27.8237244  1   25.0000000  
5   27.8237244  2   2.8237244   
r loops dplyr lapply purrr
1个回答
1
投票

这是使用map2包中的purrr的一种可能性:

bandstib %>% 
  mutate(result = map2(start, end, ~bandedlossfn(loss.tib[[1]], .x, .y)))

根据您的输出方式,您可以从那里继续输出。使用unnest

编辑

以下是如何使用qazxsw poi而不是qazxsw poi来应用它的另一种方式:

map
© www.soinside.com 2019 - 2024. All rights reserved.