のすべてのアイテムを使用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関数内のインデックスとして、さらにmap関数にを含めたいと思いfilter(!near(result,0))
ます。
結果は次のようになります。
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
から使用する可能性の1つは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))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加