我想使用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
作为索引包含在map函数中,并将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
答案 0 :(得分:1)
这是使用map2
包中的purrr
的一种可能性:
bandstib %>%
mutate(result = map2(start, end, ~bandedlossfn(loss.tib[[1]], .x, .y)))
根据您希望输出的内容,可以从此处继续操作,例如使用unnest
。
编辑
以下是使用map
而不是map2
来应用它的方法:
loss.tib %>%
mutate(result = map(value, bandedlossfn, start = bandstib$start, end = bandstib$end)) %>%
unnest() %>%
mutate(bandid = rep(seq(4), n))