我有一个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]
它也不起作用。我该怎么办?
答案 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