首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将DT中的列乘以DT[i,j]

将DT中的列乘以DT[i,j]
EN

Stack Overflow用户
提问于 2019-06-20 03:25:56
回答 1查看 76关注 0票数 1

问题1:第1行抛出错误。为什么和如何用DTi,j乘以所有列?问题2:第2行有效,但是否有更好的方法将所有其他列乘以一列?

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-20 03:33:44

当我们将一列与其余列相乘时,要么直接进行Data.table子集的乘法

代码语言:javascript
运行
复制
df[, .SD * V5, .SDcols = V1:V4]

或使用lapply

代码语言:javascript
运行
复制
df[,  lapply(.SD, `*`, V5), .SDcols = V1:V4]

请注意,在这两种情况下,我们都不更新原始数据集列。为此,我们需要:=

代码语言:javascript
运行
复制
df[, paste0("V", 1:4) := .SD * V5, .SDcols = V1:V4]

在OP的代码中,}中缺少一个关闭的line 1

代码语言:javascript
运行
复制
df[ , lapply(.SD, function(x) {x*df$V5), .SDcols = c("V1","V2","V3","V4")] 
                                      ^^

它会是

代码语言:javascript
运行
复制
df[, lapply(.SD, function(x) { x* V5 }), .SDcols = V1:V4]

在这里,我们并不像在data.table中那样需要那些曲线,列名可以被引用为未引用的,而不是df$,以及缩短的.SDcols版本,其中列名被表示为一个范围(:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56678554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档