r - 将函数应用于一个表的每个条目到另一个表的每个条目
问题描述
我想将一个函数应用于使用每个项目的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
解决方案
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))
推荐阅读
- json - 使用 VBA-JSON 库将 excel 数据转换为 json
- java - 在 Android Java 中调用另一个类中的函数
- javascript - Python 和 JavaScript 链接
- reactjs - 具有 React 上下文的当前用户
- mysql - MySQL在加入后得到两条最近的记录
- android-studio - 如何注释可能引发异常的 Kotlin 类构造函数?
- javascript - 双循环仅适用于数组的最后一项
- python - Tensorflow C++ API:如何将输入参数传递给 CUDA 内核
- javascript - 等效于 Java SHA1PRNG 的 Javascript
- python - 在不同的 conda 环境中将 R 内核安装到 jupyter notebook