我正在尝试使用查找表中的值,以在主表中相乘相应的值。
这是一些数据的例子
查找
lu = structure(list(year = 0:12, val = c(1.6422, 1.6087, 1.5909, 1.4456,
1.4739, 1.4629, 1.467, 1.4619, 1.2588, 1.1233, 1.1664, 1.1527,
1.2337)), .Names = c("year", "val"), class = "data.frame", row.names = c(NA,
-13L))
主要数据
dt = structure(list(year = c(3L, 4L, 6L, 10L, 3L, 9L, 10L, 7L, 7L,
1L), x = 1:10, y = 1:10), .Names = c("year", "x", "y"), row.names = c(NA,
-10L), class = c("data.table", "data.frame"))
我可以通过合并然后一次乘以一列来产生我想要的结果
library(data.table)
dt = merge(dt, lu, by = "year")
dt[, xnew := x*val][, ynew := y*val]
但是,我有很多变量来应用它。 有许多问题,但我无法让它发挥作用。
使用How to apply same function to every specified column in a data.table和R Datatable, apply a function to a subset of columns中的提示,我尝试了
dt[, (c("xnew", "ynew")):=lapply(.SD, function(i) i* val), .SDcols=c("x", "y")]
FUN中的错误(X [[i]],...):找不到对象'val'
for (j in c("x", "y")) set(dt, j = j, value = val* dat[[j]])
set中的错误(dt,j = j,value = val * dt [[j]]):找不到对象'val'
只是在没有分配(来自Data table - apply the same function on several columns to create new data table columns)的情况下尝试乘法也没有用。
dt[, lapply(.SD, function(i) i* val), .SDcols=c("x", "y")]
FUN中的错误(X [[i]],...):找不到对象'val'
请你指出我的错误。感谢。
我正在使用data.table版本v1.9.6。
答案 0 :(得分:2)
我们可以尝试加入,然后指定.SDcols
dt[lu, on = .(year), nomatch =0
][, c("x_new", "y_new") := lapply(.SD, `*`, val), .SDcols = x:y][]