data.table 按组对变量进行加权求和

2023-11-27

我正在寻找一种解决方案来通过 data.table 分组计算某些变量的加权和。我希望这个例子足够清楚。

require(data.table)

dt <- data.table(matrix(1:200, nrow = 10))
dt[, gr := c(rep(1,5), rep(2,5))]
dt[, w := 2]

# Error: object 'w' not found
dt[, lapply(.SD, function(x) sum(x * w)),
   .SDcols = paste0("V", 1:4)]

# Error: object 'w' not found
dt[, lapply(.SD * w, sum),
   .SDcols = paste0("V", 1:4)]

# This works with out groups
dt[, lapply(.SD, function(x) sum(x * dt$w)),
   .SDcols = paste0("V", 1:4)]

# It does not work by groups
dt[, lapply(.SD, function(x) sum(x * dt$w)),
   .SDcols = paste0("V", 1:4), keyby = gr]

# The result to be expected
dt[, list(V1 = sum(V1 * w),
          V2 = sum(V2 * w),
          V3 = sum(V3 * w),
          V4 = sum(V4 * w)), keyby = gr]

### from Aruns answer
dt[, lapply(.SD[, paste0("V", 1:4), with = F],
            function(x) sum(x*w)), by=gr]

最后的尝试(复制罗兰的答案:))

复制@Roland的优秀答案:

print(dt[, lapply(.SD, function(x, w) sum(x*w), w=w), by=gr][, w := NULL])

仍然不是最有效的:(第二次尝试)

根据@Roland的评论,对所有列进行操作,然后删除不需要的列确实更快(只要操作本身不耗时,这里就是这种情况)。

dt[, {lapply(.SD, function(x) sum(x*w))}, by=gr][, w := NULL][]

因为某些原因,w不使用的时候好像找不到{}.. 不知道为什么。


旧的(低效的)答案:

(如果组太多,子集化的成本可能会很高)

您可以在不使用的情况下执行此操作.SDcols然后将其删除,同时将其提供给lapply如下:

dt[, lapply(.SD[, -1, with=FALSE], function(x) sum(x*w)), by=gr]
#    gr V1  V2  V3  V4
# 1:  1 20 120 220 320
# 2:  2 70 170 270 370

.SDcols makes .SD without the w柱子。所以,不可能乘以w因为它不存在于 .SD 环境范围内。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

data.table 按组对变量进行加权求和 的相关文章

  • 导出绘图变量显示空白图像

    我正在使用 JRI 进行 java 和 R 集成 请找到下面的脚本 String path C Users hrpatel Desktop CSVs DataNVOCT csv rengine eval library tseries re
  • 使用 R 进行语言相关排序

    1 如何正确排序 任务是根据英文字母对美国州名缩写进行排序 但我注意到 R 根据某种操作系统语言或区域设置对列表进行排序 例如 在我的语言 立陶宛语 中 甚至拉丁语 非立陶宛语 字母的顺序也与英语字母表中的顺序不同 仅比较两个字母表中的非立
  • 在 R 中运行 glmnet 包,出现错误“缺少 TRUE/FALSE 需要的值”,可能是由于缺少值?

    我正在尝试使用glmnet来自glmnet运行 LASSO 回归的包 我正在使用以下命令 library glmnet glmnet a b family binomial alpha 1 我收到错误 gt Error in if all
  • 使用带有字边界的 mgsub 函数作为替换值

    我试图用空格替换向量中字符串元素的子字符串 以下是我们正在考虑的向量 test lt c PALMA DE MALLORCA THE RICH AND THE POOR A CAMEL IN THE DESERT SANTANDER SL
  • 如何在 R 中压缩多个 CSV 文件?

    我正在尝试在 R 中压缩多个 CSV 文件 下面是供参考的代码 Create two dataframes using inbuilt datasets for reproducible code df1 lt head mtcars df
  • 使用条件求 R 中的累积和

    我需要创建一个新变量 其中包含每个 ID 过去三年金额的总和 如果没有三年的数据 则应显示 NA 举个例子 ID YEAR AMOUNT 1 2010 5 1 2011 2 1 2012 4 1 2013 1 1 2014 3 2 2013
  • 从R中的序列中随机提取多个连续项

    Frag lt seq 1 30000 K lt 9 P lt sample 1 K 1 sys sample lt Frag seq P length Frag K 现在 sys sample 包含 3333 个数字 如何在R中随机提取1
  • R 中的整数或双精度列表

    我有一个大约 1000 个整数的列表 我需要能够进行一些数学计算 但它们被困在列表或字符形式中 我怎样才能切换它们以便它们可用 样本数据 gt y 1 1 7 3 1 6 7 1 7 6 5 3 1 3 3 0 6 2 4 9 19 1 9
  • 将数据帧单列中的值向上移动

    使用这样的示例数据 example data frame x c 1 2 3 4 5 6 7 8 y c 1 2 3 4 5 6 7 8 z c 1 2 3 4 5 6 7 8 看起来像这样 x y z 1 1 1 1 2 2 2 2 3
  • 如何从线性模型 (lm) 预测 x 值

    我有这个数据集 x lt c 0 40 80 120 160 200 y lt c 6 52 5 10 4 43 3 99 3 75 3 60 我使用计算了一个线性模型lm model lt lm y x 我想知道的预测值x如果我有新的y值
  • 在 jupyter 笔记本中内联显示 R ggplots

    我正在尝试运行这里找到的一个简单示例 https www datacamp com community blog jupyter notebook r gs OczVCjA https www datacamp com community
  • 删除 R 数据框中所有列名称的前两个字符

    有没有办法从数据框中的所有列名中按位置删除字符串 例如 如果我有如下列名称 ab sales1 kj sales2 lm sales3 pk sales100 10 34 64 288 我希望我的输出列名称类似于 sales1 sales2
  • R中的函数重新排序和排序值[重复]

    这个问题在这里已经有答案了 我正在尝试以下功能 stest lt data frame group c John Jane James mean c 3 5 1 transform stest group reorder group mea
  • 如何以 HH:MM 表示小数时间

    我有一个十进制格式的时间 22 13以小时为单位 我想在 R 中将其表达为HH MM 我是说 22 08 贬值秒 有人可以帮助我吗 语法 02 0f是将值四舍五入为整数并使其始终为 2 个单位 所以 7 8分钟将转换为字符 08 x lt
  • 如何使用 R 检测系列数据中的间隙

    我有一个设备 可以将定期 大约每 5 分钟 行插入到状态表中 每行都被视为一个状态事件并带有时间戳 我需要检测 2 个状态事件何时发生间隔超过 10 分钟 虽然我可以使用循环解决方案 但它看起来不太优雅 我正在寻找另一个答案 数据库中的表可
  • R data.table 按组创建列表列

    我有一个data table下面 我想将一个函数应用于列v2通过 分组v1 and order 结果列v3应该是下面的向量列表 如何编写这个函数 以便它为每个组的第一行返回一个 0 向量 order 1 v1 in c 1 2 对于组中的每
  • 如何在data.table中使用OR条件连接表

    在 data table 中是否可以使用 OR 条件连接表 例如 library data table X lt data table x c a b c d e f y c 1 1 2 2 3 3 z c 10 11 12 13 14 1
  • RStudio 服务器未启动

    过去几个月我一直在远程 RStudio 服务器上工作 没有任何问题 今天 我使用此命令重新启动了 rstudio 服务器 sudo rstudio server restart 此后 我无法通过浏览器访问服务器 它继续等待 我用这个检查了状
  • R 使用 dplyr 将列移动到最后

    对于 data frame 来说n列 我希望能够从任何列移动列1 n 1 位置 成为第 n 列 即非最后一列成为最后一列 我也想使用dplyr 我想这样做而不是简单地键入所有列的名称 例如 data lt data frame a 1 5
  • OpenBUGS:伯努利分布中缺失值

    我正在尝试通过 R R2OpenBUGS 使用 OpenBUGS 将观察 时间 建模为随机变量 如果所有观察时间都可用 没有 NA 则一切正常 但如果我将其中一个时间设置为 NA 则什么也不会发生 我使用 WinBUGS 测试了相同的代码

随机推荐

  • 如何在 Eclipse 中将源附加到 Google Drive API 或“Android Private Library”

    我已经安装了驱动API使用Add Google APIs 菜单选项 当手动钻入下面的任何一个罐子时驱动API 源代码打开正常 但手动钻入同一个罐子下Android Private Libraries结果是 未找到源 所以使用时open De
  • 同名的变量和函数在块内返回错误

    如果我们声明一个变量和一个同名的函数 它接受重新声明 但是当我们在一个块内做同样的事情时 它显示重新声明错误 Code var x function x no error 但在这种情况下我收到错误 var inside re declara
  • Nightwatch 无法通过 css id 或类选择器定位元素

    我们使用 Nightwatch 来自动化一些 UI 测试 当前的一些测试相当脆弱 主要与奇怪的 CSS 选择器有关 我正在尝试简化它们 但我希望一些简单的 CSS 选择器能够工作 但事实并非如此 我试图找到这个深度嵌套的 a tag a c
  • Emacs 桌面不记得 TRAMP 连接?

    我使用 emacs 在多个不同的服务器上编辑脚本和代码文件 TRAMP 运行良好 然而 当我退出 emacs 时 我所有的流浪者连接都会消失 我尝试了桌面保存模式 但重新启动 emacs 时仅显示本地文件 是否有一些软件包可以记住流浪者连接
  • 字符串作为 R 中的因子

    在 R 中创建数据框时 字符串默认转换为因子 我不介意 但是 当我想在数据框中创建新行时 我找不到将字符串编码为因子的方法 如果我使用factor 字符串被转换为数字 但仍然不是一个因子 在任何一种情况下 我都无法将新行附加到数据框中 因为
  • jquery菜单悬停

    我有一个菜单 当我将鼠标悬停在 div 上时它会显示 当鼠标移出时它会淡出 问题是 如果您滚动菜单的任何子菜单 菜单就会消失 因为从技术上讲 如果您在其中一个子菜单上 那么您就没有在父菜单上 是否有一种方法可以使滚动子菜单不会消失算作鼠标移
  • 为什么Icecast2不想通过https给出流?

    在具有 Ubuntu 14 04 LTS 的服务器上安装了支持 SSL 的 Icecast2 2 4 1 也在该服务器上运行 HTTPS 网站 我想在页面上插入 HTML5 播放器 该播放器也将通过 SSL 获取流 否则 混合内容错误 该网
  • rgba() 的颜色 IE 后备不起作用

    为什么 IE 有以下后备color red 行不通 在IE7中 颜色是black而不是red 现场演示在这里 HTML div span Hello span div CSS div width 200px height 100px bac
  • 如何编写键盘快捷键以从选定的表中选择前 1000 个*?

    有没有办法在 ssms 2012 中创建键盘快捷键 按下时会产生与select top 1000 from mytable 我已经探索过这一点 http msdn microsoft com en us library ms174178 很
  • 定位服务在 iOS 11 中不工作

    我刚刚使用 iOS 11 SDK 重建了我的应用程序 试图删除blue banner现在总是出现 我想 太棒了 这有效 却发现定位服务现在根本不起作用 该应用程序曾经在 iOS 10 上运行 有人听说过什么吗 看来苹果又增加了一项隐私功能
  • 以编程方式创建时椭圆形被剪裁

    我有一个剪辑问题 首先 我尝试仅使用 Xml 显示椭圆形 我有以下代码 res drawable circle xml
  • 具有偶数个 0 和 1 的字符串的正则表达式

    包含偶数个 0 和偶数个 1 的 0 和 1 字符串的正则表达式是什么 我有类似的东西 1 01 01 0 10 10 看起来不错吗 好吧 这可能是家庭作业 但到底是什么 00 11 01 10 00 11 01 10 编辑 简化
  • Windows 下 Python 3 的 open() 的默认编码。不遵守 sys.getdefaultencoding() 设置

    我已经为这个问题绞尽脑汁好几个小时了 我有一个消息文件 我想使用 django 的 makemessages 命令生成 该命令在 Linux 环境中运行得很好 它实际上以合理的方式处理区域设置 然而 当我在 Windows 下尝试同样的事情
  • REST - Web 服务响应 - mime 类型?

    1 为 Web 服务响应设置正确的 MIME 类型重要吗 2 正确的哑剧类型是什么 a XML 响应 b JSON 响应 application xml text xml application json application x jav
  • Laravel 4 路由参数数量不受限制

    我正在尝试为无限数量的 URL 级别创建动态路由 这是我当前的路线 Route get pageLink array uses gt SiteController getPage 这适用于第一级 所以像something com foo 这
  • 如何在 ScriptBlock 中传递 $_ ($PSItem)

    我基本上是使用运行空间构建自己的并行 foreach 管道函数 我的问题是 我这样调用我的函数 somePipeline MyNewForeachFunction scriptBlockHere pipelineGoesOn 我怎样才能通过
  • JavaScript 中的程序化重音减少(又名文本规范化或无重音)

    我需要比较两个字符串是否相等 如下所示 吕贝克 吕贝克 在 JavaScript 中 为什么 嗯 我有一个自动完成字段 它使用 Lucene 发送到 Java 服务 其中地名自然存储 如吕贝克 但也作为规范化文本进行索引 import su
  • 未找到 codeigniter MY_Controller

    我正在为网站使用 Codeigniter 2 1 3 因此我需要扩展 CI Controller 以便我可以添加一个要与所有控制器一起执行的方法 因此我执行了 user guide 中的操作 在 application core 文件夹中创
  • 上次修改日期对象

    如何找出 MS SQL Server 2000 对象的最后修改日期 我需要获取自 8 月 15 日以来修改的所有视图 过程 函数等的列表 在 sysObjects 中 我可以看到对象的创建日期 但我需要知道它们上次更改的时间 注意 这是一个
  • data.table 按组对变量进行加权求和

    我正在寻找一种解决方案来通过 data table 分组计算某些变量的加权和 我希望这个例子足够清楚 require data table dt lt data table matrix 1 200 nrow 10 dt gr c rep