问题1:第1行抛出错误。为什么和如何用DTi,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
发布于 2019-06-20 03:33:44
当我们将一列与其余列相乘时,要么直接进行Data.table子集的乘法
df[, .SD * V5, .SDcols = V1:V4]
或使用lapply
df[, lapply(.SD, `*`, V5), .SDcols = V1:V4]
请注意,在这两种情况下,我们都不更新原始数据集列。为此,我们需要:=
df[, paste0("V", 1:4) := .SD * V5, .SDcols = V1:V4]
在OP的代码中,}
中缺少一个关闭的line 1
df[ , lapply(.SD, function(x) {x*df$V5), .SDcols = c("V1","V2","V3","V4")]
^^
它会是
df[, lapply(.SD, function(x) { x* V5 }), .SDcols = V1:V4]
在这里,我们并不像在data.table中那样需要那些曲线,列名可以被引用为未引用的,而不是df$
,以及缩短的.SDcols
版本,其中列名被表示为一个范围(:
)
https://stackoverflow.com/questions/56678554
复制相似问题