Я хотел бы условно соединить две таблицы данных вместе:
library(data.table)
set.seed(1)
key.table <-
data.table(
out = (0:10)/10,
keyz = sort(runif(11))
)
large.tbl <-
data.table(
ab = rnorm(1e6),
cd = runif(1e6)
)
в соответствии со следующим правилом: соответствие наименьшему значению out
в key.table
, значение keyz
которого больше cd
. У меня есть следующее:
library(dplyr)
large.tbl %>%
rowwise %>%
mutate(out = min(key.table$out[key.table$keyz > cd]))
который обеспечивает правильный вывод. Проблема в том, что операция rowwise
кажется дорогой для large.tbl
, которую я фактически использую, сбой ее, если она не находится на определенном компьютере. Есть ли меньше операций, связанных с памятью? Следующее выглядит немного быстрее, но недостаточно для проблемы, которую у меня есть.
large.tbl %>%
group_by(cd) %>%
mutate(out = min(key.table$out[key.table$keyz > cd]))
Это пахнет проблемой с ответом data.table
, но ответ не должен использовать этот пакет.