r - 地图功能内的索引列表
问题描述
这是上一个问题的延续: Apply function over each entry an table to each entry of another
我有以下表格loss.tib
和bandstib
功能bandedlossfn
:
library(tidyverse)
set.seed(1)
n <- 5
loss.tib <- tibble(lossid = seq(n),
loss = rbeta(n, 1, 10) * 100)
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
usingbandstib
作为参数:
loss.tib %>%
mutate(
result = map(
loss, ~ tibble(result = bandedlossfn(.x, bandstib$start,
bandstib$end))
)
) %>% unnest
但是,我想在 map 中添加一个索引,如下所示:
loss.tib %>%
mutate(
result = map(
loss, ~ tibble(result = bandedlossfn(.x, bandstib$start,
bandstib$end)) %>%
mutate(bandid2 = row_number())
)
) %>% unnest
但它似乎没有按预期工作。我还想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
谢谢你。
解决方案
这是一种可能性:您首先嵌套bandstib
并将其添加到loss.tib
. 这样 id 就会坚持你的计算:
bandstib <- tibble(bandid = seq(4),
start = seq(0, 75, by = 25),
end = seq(25, 100, by = 25)) %>%
nest(.key = "data")
set.seed(1)
n <- 5
result <- tibble(loss = rbeta(n, 1, 10) * 100) %>%
bind_cols(., slice(bandstib, rep(1, n))) %>%
mutate(result = map2(loss, data, ~bandedlossfn(.x, .y$start, .y$end))) %>%
unnest()
推荐阅读
- scala - 播放框架“对等连接重置”
- sql - SQL 日期格式以显示数字日期值,后跟一个后缀
- python - Google Ad Manager API 报表查询
- python - 如何使用 Python 找到 BeautifulSoup 下一个标签/元素?
- javascript - 状态没有反映在箭头函数中?
- c# - 如何使用 Word Interop 识别 Word 文档中每一页的最后一段?
- javascript - 如何让数组退出函数
- julia - 为什么有些函数以 ! (感叹号)在朱莉娅?
- javascript - Chrome 商店拒绝 Chrome 扩展程序
- c++ - 如何仅在启动 dll 时执行命令?