使用另一个 data.table 中的值更新 data.table 中的值

2023-12-07

我有一个包含大约 2500 万行的数据集。我正在获取这些行的子集并执行一个运行良好的函数。但是,我接下来需要做的是用新值更新原始数据集中的值,同时保留其余值。我确信这很简单,但我就是无法理解它。

这是我正在处理的事情的简化版本:

require("data.table")

df <-data.frame(AREA_CD = c(sample(1:25000000, 25000000, replace=FALSE)), ALLOCATED = 0, ASSIGNED = "A", ID_CD = c(1:25000000))
df$ID_CD <- interaction( "ID", df$ID_CD, sep = "")
dt <- as.data.table(df)

sub_dt <- dt[5:2004,]
sub_dt[,ALLOCATED:=ALLOCATED+1]
sub_dt[,ASSIGNED:="B"]

我所追求的是“分配”和“分配”中的值sub_dt替换 'ALLOCATED' 和 'ASSIGNED' 值dt基于“ID_CD”列。根据我的示例,我想要的输出仍然有 2500 万行,但有 2000 个更新行。任何帮助将非常感激。谢谢。


大卫·阿伦堡提供的答案在他的评论中解释如何将修改后的数据子集连接回原始数据data.table.

但是,我想知道为什么OP不直接在原始版本中应用更改data.table 引用使用返回列表的函数:

my_fun <- function(alloc, assig) {
  list(
    alloc + 1,
    "B")
}

使用此函数可以直接在data.table:

dt[5:2004, c("ALLOCATED", "ASSIGNED") := my_fun(ALLOCATED, ASSIGNED)]
dt[1:7]
#   AREA_CD ALLOCATED ASSIGNED ID_CD
#1:    1944         0        A   ID1
#2:    3265         0        A   ID2
#3:   15415         0        A   ID3
#4:   14121         0        A   ID4
#5:   10546         1        B   ID5
#6:    2263         1        B   ID6
#7:   12339         1        B   ID7

基准

由于内存限制,仅使用具有 250 万行(而不是 OP 中的 2500 万行)的较小数据集。

library(microbenchmark)
setDT(df)  # coerce df to data.table
microbenchmark(
  copy = dt <- copy(df),
  join = {
    dt <- copy(df)
    sub_dt <- dt[5:2004,]
    sub_dt[,ALLOCATED:=ALLOCATED+1]
    sub_dt[,ASSIGNED:="B"]
    dt[sub_dt, `:=`(ALLOCATED = i.ALLOCATED, ASSIGNED = i.ASSIGNED), on = .(ID_CD)]
  },
  byref = {
    dt <- copy(df)
    dt[5:2004, c("ALLOCATED", "ASSIGNED") := my_fun(ALLOCATED, ASSIGNED)]
  },
  times = 10L
)
#Unit: milliseconds
#  expr       min        lq      mean    median        uq       max neval
#  copy  13.80400  14.07850  28.22882  14.15836  14.39643 154.70570    10
#  join 239.36476 240.72745 244.27668 243.52967 246.17104 255.06271    10
# byref  14.28806  14.47308  15.00056  14.63147  14.73134  18.71181    10

更新中data.table“就地”比创建子集然后再加入要快得多。需要复制操作才能使用未修改的版本启动每个基准测试运行dt。因此,复制操作也被基准化。

data.table使用版本1.10.4。

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

使用另一个 data.table 中的值更新 data.table 中的值 的相关文章

  • 从组成员数据创建加权图

    假设我有一个 R 数据集 指示组内的个体 这是一个例子 grp lt c 1 1 1 2 2 2 2 3 3 3 4 4 4 5 5 ind lt c A C D B C D E A D E B F E A F data frame grp
  • 更改 ggplot 对象的数据集

    我正在绘制数据的子集ggplot2我想知道我是否会以某种方式使用已包含在ggplot原始数据子集中的对象 举个例子 这是第一个图 代码块 1 require ggplot2 p lt ggplot mtcars aes mpg wt col
  • 测试 PCA 图上簇的显着性

    是否可以在 PCA 图上测试 2 个已知组之间聚类的显着性 测试它们的接近程度或分布量 方差 以及簇之间的重叠量等 这是一种定性方法 使用ggplot 在簇周围绘制 95 置信椭圆 注意stat ellipse 使用二元 t 分布 libr
  • 基本 R 图:帮助减少多个图之间的空间

    我试图减少一个窗口中多个绘图之间的空间量 但无法实现我想要的 情节和代码如下 我想将图例保留在原处 但减少 B 和 C 之间的空间 如何将图 C 向左 移动到靠近图 B 的位置以模仿 A 和 B 之间的间距 同时保持图例就位 我希望传奇是独
  • 如何在 Windows 上使用 freeType 构建 rgl

    我正在尝试 并且非常失败 建立rgl封装有freeType在 Windows 上 因为事实证明 rgl我通过 Rgui 安装的 Windows 二进制文件不包括freeType支持 我需要它的原因是this https stackoverf
  • 从 R 中的数据框/矩阵中选择一列时保留列名称

    在R中 当我只从数据框 矩阵中选择一列时 结果将变成一个向量并丢失列名称 如何保留列名称 例如 如果我运行以下代码 x lt matrix 1 3 3 colnames x lt c test1 test2 test3 x 1 我会得到 1
  • rollapply 可以返回矩阵列表吗?

    我想使用滚动窗口生成协方差矩阵 和均值向量 但在我所有的尝试中rollapply堆叠协方差矩阵cov并且耗尽了预先分配的空间 例如 如果我的原始数据有 40 个观察值 那么rollapply不能返回超过 40 行 有什么方法可以让我得到ro
  • 如何强制geom_point在R中显示比例大小?

    我的数据如下 抱歉有点大 test dput 我还有一个绘制这些数据的代码 这里的问题是它没有给我比例大小read counts value多变的 我怎样才能解决这个问题 谢谢 my code p ggplot test dput aes
  • 合并行并用 group_by 和? 填充空位置

    对 R 编码非常陌生 我一直在尝试使用 dplyr 中的 group by 格式化 合并 df 中的行 然而 我还没有完全做到这一点 这是我的数据表的简化 前三个条目共享相同的 id 最后两个条目共享相同的 id ID Assay1 Ass
  • 如何查找页面上R图形的字节大小?

    我想监控 R 在各个页面上生成的图形的基本质量 例如每个页面的字节大小 我现在只能对平均页面进行质量保证 请参阅下面的章节 我认为这项任务必须有一些比一般措施更内置的东西 生成 4 页的代码Rplots pdf我想知道此处输出中每个页面的字
  • kableExtra:垂直对齐在多列 PDF 输出中不起作用

    我想将 kableExtra 表中的所有列对齐到顶部 这valign top 选项似乎并不能解决这里的问题 此外 由于某种原因 第三列不知何故被放在第二列之上 并且引用也不起作用 下面的MWE是基于这个相关的SO问题 它只需要2列 kabl
  • 如何对每行具有不同列位置的矩阵进行子集化? [复制]

    这个问题在这里已经有答案了 我想为每一行使用不同的 但一列 列来对矩阵进行子集化 那么申请可以完成这项工作吗 但也许智能子集也可以工作 但我还没有找到解决方案 计算时间是一个问题 我有一个带有 for 循环的解决方案 但多次将矩阵加载到 R
  • C# - 更改数据表特定列的所有行的值[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决方案 为什么它们不起作用以及预期结果 也可以看看 Stack Over
  • Sparklyr - 在 Apache Spark Join 中包含空值

    问题在 Apache Spark Join 中包含空值 https stackoverflow com questions 41728762 including null values in an apache spark join有 Sc
  • 无法使用 rtools40 和 R 4.0 构建 RDCOMClient

    不久前 我创建了 RDCOMClient 包的一个分支 以使其与 R 3 6 一起工作 https github com dkyleward RDCOMClient https github com dkyleward RDCOMClien
  • 如何使 R barplot 上的列标签变为斜体

    这可能是一个简单的问题 但是如何仅将条形图上的列标签设为斜体 而不是斜体x axis标签 但列标签是专门的 到目前为止我的代码是 bp barplot means names arg c CON TRI ylim c 0 120 ylab
  • prop.test 使用什么公式?

    The prop test函数显然没有使用给定的公式here https onlinecourses science psu edu stat200 node 48创建置信区间 那么使用什么公式 下面是一个置信区间CI使用 prop tes
  • 具有不同侧边栏的选项卡

    我正在尝试创建一个带有多个选项卡的闪亮应用程序 每个选项卡都有自己的侧边栏 我还没能让它发挥作用 任何有关错误的帮助将不胜感激 下面是代码 ui lt fluidPage titlePanel Hi sidebarLayout positi
  • R 中的威布尔分布 (ExtDist)

    有人使用威布尔分布遇到过问题吗 扩展包 https www rdocumentation org packages ExtDist versions 0 6 3 来自文档 https www rdocumentation org packa
  • 使用 cbind 的 for 循环中的动态列名称

    我正在尝试这样的循环 我想动态分配矩阵列的名称 for i in 1 nclass P lt eXb SeXb mydata chid mydata lt cbind mydata paste l i sep P 有什么想法 除了事后更改

随机推荐

  • 如何在 Protégé 中使用 OWL 解决爱因斯坦之谜时获得个人结果?

    我想更好地理解本体论和推理 有一个有趣的谜题叫做爱因斯坦的谜语在网上可以借助本体论和推理来解决 我从该站点下载了 OWL 本体并将其导入 Protege 4 0 2 不适用于 4 1 我可以通过以下方式启动推理机推理机 FaCT 推理机 分
  • oracle中格式化DATE

    我的表中有一个日期字段 其中包含 dd MMM yy 格式的日期 我想创建一个函数来获取此日期 检查它是否为空 然后将其更改为 yyyy mm dd 格式 但问题是oracle不接受dd MM YYyy格式的日期作为输入参数 它说 请使用
  • .net core 是否支持代码契约?

    在 net 框架中 有代码契约允许我在代码中指定前置 后置条件 net core net 5 支持它们吗 命名空间System Diagnostics Contracts可用 但项目是弃 另类VS2019 https softwarerec
  • 嵌套集模型 PHP 库

    您好 我需要使用嵌套集模型来管理我网站上的产品类别 有谁知道一些好的预构建 PHP 库用于处理 MySQL 中的嵌套集 你可以尝试 Baobab 这是我最近发布的一个库 http www sideralis org baobab
  • 使用独立 NDK 工具链构建协议缓冲区

    我在使用 NDK build tools make standalone toolchain sh 脚本创建的独立 NDK 工具链构建 Android 协议缓冲区时遇到问题 我遇到的问题是这样的 libtool link g Wall Ww
  • 如何使用 ngFor ionic 隐藏未使用的项目?

    我试图从 ngFor 中隐藏未使用的项目 问题是 我确实成功隐藏了它 但它的位置仍然存在并且是空的 如下图所示 我的 ts 文件 coupon any couponz var data for let co of this shared c
  • 使用 lm() 和 Predict() 进行滚动回归和预测

    我需要申请lm 到我的数据框的扩大子集dat 同时对下一次观察进行预测 例如 我正在做 fit model predict dat 1 3 dat 4 dat 1 4 dat 5 dat 1 dat nrow dat 我知道我应该为特定子集
  • 我有一个 dd-mon-yyyy 格式的日期(字符串),我想将此日期与系统日期进行比较

    我在 字符串 中有一个 dd mon yyyy 格式的日期 我想将此日期与系统日期进行比较 例如 我的时间是 2010 年 10 月 12 日 我想将其与相同格式的系统日期进行比较 您可以使用SystemDateFormat例如 用于解析字
  • MySQL 显示状态 - 活动连接数还是总连接数?

    当我跑步时show status like Con 它显示了连接数 为 9972 并且还在不断增长 这是活跃连接数还是总连接数 根据the docs 表示历史上的总数 Connections 尝试连接 MySQL 服务器的次数 成功或失败
  • JavaScript:检测表单提交完成

    我在 iframe 中有一个表单并提交它 我如何知道提交何时完成 我正在使用 jQuery 提交表单 但不认为有回调 myForm submit 如何将事件附加到提交完成 提交表格会将您重定向到下一页 但你总是可以尝试ajax功能 http
  • ThreeJS - 如何将环境贴图应用到导入的 obj 模型?

    EDIT 我在这篇文章中找到了一个解决方案 如何将材质分配给 ColladaLoader 或 OBJLoader 我使用以下代码实现了允许我在导入的 obj 上使用 envMaterial 立方体贴图的效果 var loader new T
  • 如何使用selenium为firefox浏览器禁用通知

    我想在启动 Firefox 浏览器时完全禁用通知 对于不同的浏览器 驱动程序 需要设置不同的配置文件 选项 Firefox FirefoxProfile ffprofile new FirefoxProfile ffprofile setP
  • 与 NEON 内在函数的数据类型兼容性

    我正在使用来自 C 代码的 NEON 内在函数进行 ARM 优化 我理解并掌握了大部分打字问题 但我陷入了这一问题 指令vzip u8返回一个uint8x8x2 t值 实际上是两个数组uint8x8 t 我想将返回值分配给一个普通的uint
  • C# 泛型类中的协方差

    C 4 0 NET 4 5 Silverlight 5 看起来很奇怪 我找不到解决方案 所以需要一些帮助 我有基类 Base 和派生类 Child Base 我还有帮助程序类 它具有通用类型来执行特定工作 一个 EF 实体帮助程序 其中 T
  • 如何从文件路径中删除%20?

    file home ashu Music Collections randomPicks ipod 20on 20sep 2009 Coldplay Sparks mp3 如何转换像上面这样的字符串以获得可以传递到的正常文件路径open 功
  • 如何使用 mechanize 库执行 HEAD 请求?

    我知道如何使用 httplib 执行 HEAD 请求 但我必须对该站点使用 mechanize 本质上 我需要做的是从标头 文件名 中获取值 而不实际下载文件 有什么建议我可以如何实现这一点吗 Mechanize 本身仅发送 GET 和 P
  • 在 OfficeJS 中,您可以检索绑定对象的范围吗?

    针对 Word Online 但任何针对 Excel PPT 的指示也会有所帮助 本质上 是否可以将绑定对象内的文本视为范围 因此 能够选择全部并将插入符移动到开头 结尾 我设想代码具有以下效果 Office select myBindin
  • 如何从 python 中的另一个 .py 文件访问全局变量?

    我创建了两个文件 当我运行时a py 结果是 1 1 这是正确的 然而 运行b py 结果是没有 我如何获取请求的值b py a py requests def set value global requests requests 1 1
  • 创建一个大的虚拟文件

    我是这个社区的新手 也是 iOS 开发的新手 我希望有人能帮助我解决一些小问题 目前我正在为自己编写一个小应用程序 它应该创建一个非常大的虚拟文件 其中包含虚拟数据或单词或任何使它变大的东西 原因是 我想单击一个按钮 应用程序应该生成一个
  • 使用另一个 data.table 中的值更新 data.table 中的值

    我有一个包含大约 2500 万行的数据集 我正在获取这些行的子集并执行一个运行良好的函数 但是 我接下来需要做的是用新值更新原始数据集中的值 同时保留其余值 我确信这很简单 但我就是无法理解它 这是我正在处理的事情的简化版本 require