我想将一个函数应用于匹配两个不同子字符串的选定列。我发现这篇文章与我的问题有关,但我无法从那里得到答案。
这是我失败的尝试的可重现示例。为了这个例子,我想做一个逐行操作,对所有以 string 开头的列的值求和,v
并从所有以f
.
更新:建议的解决方案必须(a)使用:=
运算符来充分利用data.table
快速性能,以及(2)对其他操作灵活,而不是mean
and sum
,我在这里使用它只是为了简单起见
library(data.table)
# generate data
dt <- data.table(id= letters[1:5],
v1= 1:5,
v2= 1:5,
f1= 11:15,
f2= 11:15)
dt
#> id v1 v2 f1 f2
#> 1: a 1 1 11 11
#> 2: b 2 2 12 12
#> 3: c 3 3 13 13
#> 4: d 4 4 14 14
#> 5: e 5 5 15 15
# what I've tried
dt[, Y := sum( .SDcols=names(dt) %like% "v" ) - mean( .SDcols=names(dt) %like% "f" ) by = id]