将data.table的列乘以向量

时间:2018-11-15 11:57:41

标签: r data.table

我有一个data.table,我想将第1列中的所有值乘以向量的第一个元素,然后将第2列中的所有值乘以向量的第2个元素,依此类推...

dt <- data.table(col1=c(1,1,1,1), col2=c(2,2,2,2), col3=c(3,3,3,3))
v <- c(1,2,3)

对于data.frame我会做

dt.new <- sapply(1:ncol(dt), function(i) dt[, i] * vec[i])

但是对于data.table来说,它不是这样工作的。我尝试过

cols <- c("col1", "col2", "col3")
dt.new <- dt[, (cols):= lapply(.SD, function(i) dt[[i]]*v[i]), .SDcols = cols]

它也不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:5)

Map是为此设计的:

dt[, Map("*", .SD, v)]
#   col1 col2 col3
#1:    1    4    9
#2:    1    4    9
#3:    1    4    9
#4:    1    4    9

也可以使用data.frame:

DF <- as.data.frame(dt)
as.data.frame(Map("*", DF, v))
#  col1 col2 col3
#1    1    4    9
#2    1    4    9
#3    1    4    9
#4    1    4    9