【发布时间】:2017-06-15 14:22:37
【问题描述】:
我想将一个函数应用于匹配两个不同子字符串的选定列。我找到了这个post related to my question,但我无法从那里得到答案。
这是我失败的尝试的可重现示例。为了这个例子,我想做一个逐行操作,对以字符串v 开头的所有列的值求和,然后从以f 开头的所有列的平均值中减去。
更新: 建议的解决方案必须 (a) 使用 := 运算符以充分利用 data.table 的快速性能,以及 (2) 对其他操作灵活,而不是 mean和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]
【问题讨论】:
-
Y的期望输出是-9, -8, -7, -6, -5
标签: r data.table rowwise