问题1:第1行引发错误。为什么以及如何将所有列乘以DT [i,j]? 问题2:第2行有效,但是有更好的方法将所有其他列乘以一列吗?
df=data.table(matrix(1:15,3,5))
df[ , lapply(.SD, function(x) {x*df$V5), .SDcols = c("V1","V2","V3","V4")] #line 1
df[ , lapply(.SD, function(x) {x*df[1,"V5"})}, .SDcols = c("V1","V2","V3","V4")] #line 2
答案 0 :(得分:4)
当我们将一列与其余列相乘时,要么直接对Data.table的子集进行相乘
func deleteWord(_ word: RelatedWord) {
do {
try self.write {
self.delete(word)
}
} catch let error {
print(error.localizedDescription)
}
self.refresh()
}
或与df[, .SD * V5, .SDcols = V1:V4]
lapply
请注意,在两种情况下,我们都不会更新原始数据集列。为此,我们需要df[, lapply(.SD, `*`, V5), .SDcols = V1:V4]
:=
在OP的代码中,df[, paste0("V", 1:4) := .SD * V5, .SDcols = V1:V4]
中缺少结束符}
line 1
应该是
df[ , lapply(.SD, function(x) {x*df$V5), .SDcols = c("V1","V2","V3","V4")]
^^
在这里,我们并不需要数据表中的那些curly。可以将列名引用为无引号,而不用df[, lapply(.SD, function(x) { x* V5 }), .SDcols = V1:V4]
来引用,而df$
的缩写形式是列名表示为范围(.SDcols
)