R data.table .EACHI vs in in merge,和.SD in the data.table

时间:2017-12-25 11:36:45

标签: r data.table

我正在尝试使用data.table的特殊符号(.N.I.GRP)。我挣扎的是.EACHI。是的,我已经阅读了data.table文档,但我从来没有真正理解它...它有时对我来说很神秘。

为了更好地理解.EACHI,我查看了涉及它的所有问题。这个让我难过:

Conditional data.table merge with .EACHI

重现这里的重要部分:

library(data.table)
set.seed(1L)

# Simulate some data
dtBig <- data.table(ID=c(sapply(LETTERS[1:5], rep, 10, simplify = TRUE)), ValueBig=ceiling(runif(50, min=0, max=1000)))
dtBig[, Rank := frank(ValueBig, ties.method = "first"), keyby=.(ID)]


dtSmall <- data.table(ID=c(sapply(LETTERS[1:5], rep, 2, simplify = TRUE)), ValueSmall=ceiling(runif(10, min=0, max=1000)))

为什么这样做:

setorder(dtBig, ValueBig)
dtSmall[dtBig, RankSmall2 := max(i.Rank), by=.EACHI, on=.(ID, ValueSmall >= ValueBig)]

但这不是吗? (这会产生错误:)

dtSmall[dtBig, RankSmall2 := max(i.Rank), by=ID, on=.(ID, ValueSmall >= ValueBig)]

最后,答案提供给我难以理解的问题。有没有办法打破它?我从未在data.table的.SD部分中看到i

setorder(dtBig, ID, ValueBig, Rank)
dtSmall[, r :=
  dtBig[.SD, on=.(ID, ValueBig <= ValueSmall), mult="last", x.Rank ]
]

我很感激解释为什么这些工作。更一般的解释(教人钓鱼),所以我知道何时是考虑使用.EACHI的好时机。

0 个答案:

没有答案