我有一个自定义函数我想应用于数据表,如下所示:
DT = data.table(x = rep(c("a","b","c"), each = 2),
x2 = rep(c("h","j"), each = 3),
y = c(1,3),
v = 1:6,
z = 7:12,
w = 13:18)
DT
x x2 y v z w
1: a h 1 1 7 13
2: a h 3 2 8 14
3: b h 1 3 9 15
4: b j 3 4 10 16
5: c j 1 5 11 17
6: c j 3 6 12 18
我有一个功能,我希望按DT
列对x
的数字列进行评分。该函数按两个固定列分数,并对数字列上的第3列执行计算。该函数如下(下划线表示不固定的列):
scoring <- function(_, z, w) {
f <- abs(w - _) / abs(w - z)
f[is.infinite(f)] <- 1
f[is.nan(f)] <- 1
return(median(f))
}
结果将(在这种情况下)有2个新列y
和v
,这两个列将使用x
的分数函数进行聚合(对于群组& #34; a&#34;,&#34; b&#34;和&#34; c&#34;。例如:
y: a: 0.9166667
y: b: 1.25
y: c: 1.583333
v: a: 1
v: b: 1
v: c: 1
我的问题是:
我知道我可以在data.table中使用by
功能,但我不知道如何告诉它为我的自定义函数保留两个列并对其余列执行计算。