[英]Multiply columns of a data.table by a vector
我有一個data.table,我想將列1中的所有值乘以向量的第一個元素,然后將列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]
它也不起作用。 我怎樣才能做到這一點?
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.