我想将一个函数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
这是使用map2
包中的purrr
的一种可能性:
bandstib %>%
mutate(result = map2(start, end, ~bandedlossfn(loss.tib[[1]], .x, .y)))
根据您的输出方式,您可以从那里继续输出。使用unnest
。
编辑
以下是如何使用qazxsw poi而不是qazxsw poi来应用它的另一种方式:
map