寻求一种更好的方法从查找表中添加 data.table 中的列

2024-01-26

我想创建一个新专栏key在我的 data.table 中,通过公共列与查找表合并index1 & index2。然后从这个新的值key柱子 (a,b,c),我想生成 3 个新列(a,b,c) 索引valuedata.table 中的列。

我的 data.table 看起来像这样:

    index1      index2    value
1       2          0     0.00
2       1          2    -5.00
3       3          2    -5.00
4       3          2    17.50
5       2          2    15.00
6       1          2    -7.50
7       3          2     3.75
8       1          2    -8.75
9       2          1    15.00
10      2          1    12.50

查找表是这样的:

 index1  index2  key
1    1        1   a
2    1        2   b
3    2        1   a
4    2        2   c
5    3        1   c
6    3        2   b

最终结果是这样的:

    index1     index2   value  key       a       b      c
1       2          0     0.00   NA      NA      NA     NA
2       1          2    -5.00    b      NA   -5.00     NA
3       3          2    -5.00    b      NA   -5.00     NA
4       3          2    17.50    b      NA   17.50     NA
5       2          2    15.00    c      NA      NA  15.00
6       1          2    -7.50    b      NA   -7.50     NA
7       3          2     3.75    b      NA    3.75     NA
8       1          2    -8.75    b      NA   -8.75     NA 
9       2          1    15.00    a   15.00      NA     NA
10      2          1    12.50    a   12.50      NA     NA

我尝试通过首先合并 data.table 和查找表来解决它merge(),然后使用J()分别进行三次才能达到上述结果。我对 data.table 还很陌生,但很想学习一种更优雅的方法来解决这个问题,而不是多次重复该过程。这是我的代码:

DT <- merge(DT, lookup, by=c('index1', 'index2'), all.x=TRUE)
DT <- data.table(DT)  #Don't know why but DT became a data.frame after merge()
DT[J("a"), a:=value]
DT[J("b"), b:=value]
DT[J("c"), c:=value]

由于您想加入索引1和索引2,因此可以使用merge正如您所拥有的,或者如果您将这些作为键分配给每个表,那么您可以简单地使用[]加入。 (如DT[lookup] )

 setkey(lookup, index1, index2)
 setkey(DT, index1, index2)

然后你可以迭代每个唯一的key从你的lookup表如下

 keyVals <- unique(lookup[, key])

 for (k in keyVals)
   DT[lookup[key==k], c(k) := value]

结果:

DT
#     index1 index2 value    a     b  c
#  1:      1      2 -5.00   NA -5.00 NA
#  2:      1      2 -7.50   NA -7.50 NA
#  3:      1      2 -8.75   NA -8.75 NA
#  4:      2      0  0.00   NA    NA NA
#  5:      2      1 15.00 15.0    NA NA
#  6:      2      1 12.50 12.5    NA NA
#  7:      2      2 15.00   NA    NA 15
#  8:      3      2 -5.00   NA -5.00 NA
#  9:      3      2 17.50   NA 17.50 NA
# 10:      3      2  3.75   NA  3.75 NA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻求一种更好的方法从查找表中添加 data.table 中的列 的相关文章

随机推荐

  • 使用 Google 登录,仅允许组织域帐户

    我正在尝试创建一个只能通过 Google 登录才能访问且只能使用 GSuite 组织域 的 Web 应用程序 我希望这样做 而不需要事先初始化允许哪些域 这意味着它允许在 Google 下注册的所有电子邮件地址 但不允许 gmail com
  • 发布到 azure 后,与 MVC4 捆绑不起作用

    您好 我正在尝试为我的应用程序捆绑我的脚本 我的调试正在工作 如果我使用 Web debug 发布 一切都会正常 但是当我使用 Web releases 发布时 我的脚本不会加载 一切都在本地运行 只有当我从 VS2012 发布到 Azur
  • Swift 3 - Firebase 推送通知,我该怎么办?

    我确实喜欢下面的 Swift 2 但它在 Swift 3 中不起作用 我该如何提供这个 如果有人解释一下那就太好了 didFinishLaunchingWithOptions let notificationSettings UIUserN
  • 如何使用ANTLR生成的语法文件?

    我认为这是一个愚蠢的问题 但我刚刚开始使用 ANTLR 我将他们教程中的 SimpleCalc 语法放在一起 并以 C 作为目标语言生成它 我得到了 SimpleCalcParser c h 和 SimpleCalcLexer c h 作为
  • 正则表达式:懒惰更糟糕吗?

    我一直这样写正则表达式 a href target blank lt a 但我刚刚了解到这个懒惰的事 http www regular expressions info examples html我可以这样写 a href target b
  • Python无法访问字典

    Getting TypeError string indices must be integers当尝试访问 python 中的字典时 我尝试过使用json loads r2 这产生了 TypeError the JSON object m
  • 如何使用getCropAndSetWallpaperIntent?

    我尝试使用 getCropAndSetWallpaperIntent 方法 但出现错误 这是我的代码 Uri uri Uri parse content getFilesDir image path ContentResolver cont
  • Angular 8 嵌套拖放

    不幸的是我找不到常见问题的解决方案 这是代码的链接https stackblitz com edit angular ygwaxs https stackblitz com edit angular ygwaxs 我有这样的场景 从服务器我
  • 简单的 Javascript 碰撞检测?

    我正在尝试使用 jquery javascript html 和 css 制作一个简单的游戏 我一直陷入碰撞检测 code var map 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
  • 在 Sequel 中使用 UTC?

    我不想将时间存储在我当地的时区 但续集让我变得非常困难 我可以在将它们放在那里之前将它们设置为 UTC 有点痛苦 但是当我将它们取出时 它会假设它们是本地日期 然后它们都是未来的 8 小时 这是还没有实施的事情吗 如果是这样 有什么解决方法
  • UISearchBarSearchField 背景视图颜色

    I am trying to change the background color of the search bar text field and i have searched and tried lots of solutions
  • 流星模板中包含的谷歌地图被渲染两次

    我有以下模板
  • 设置 Visual Studio 代码以使用 R - “win32 无法使用 R”

    我正在尝试设置 R 以使用 Visual Studio 代码 当我用按键执行一行时CTRL ENTER我收到错误 win32 无法使用 R 我遵循本文中提出的建议中等职位 https medium com analytics vidhya
  • 如何设置phpmyadmin的用户名和密码[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何设置phpmyadmin的用户名和密码 我正在为 localhost 使用 xampp 软件 并且我想锁定我的 phpmyadmin 页面 当我打
  • Intl.NumberFormat 在节点和浏览器中的不同行为

    如果我在浏览器和节点中运行此代码 我会得到两个不同的结果 const moneyFormatter new Intl NumberFormat it IT style currency currency EUR minimumFractio
  • 如何在 jQuery 中永久运行 .animate 函数?

    this css left 100px function endless this animate left 100px easing linear duration 5000 complete function this css left
  • 实体框架级联删除 - FOREIGN KEY 约束

    我对以下模型有问题 public class ProjectPage Key public Guid Id get set public Guid HeaderId get set public ProjectPage Header get
  • 如何在 JList 中启用拖放

    我有一个 JList 并希望用户能够使用拖放功能对列表中的元素重新排序 使用我自己的 ListModel 和 ListCellRenderer 如果这有什么不同的话 我需要创建哪些对象 以及如何处理该操作 修改后的 Jan Taccis 答
  • 从 Python rpy2 使用命令行参数调用 R 脚本

    我希望能够使用 rpy2 模块从 python 调用 R 文件 我希望能够将参数传递给这些脚本 这些脚本可以由 R 的 commandArgs 函数解释 所以如果我的 R 脚本 trivial script r 好像 print comma
  • 寻求一种更好的方法从查找表中添加 data.table 中的列

    我想创建一个新专栏key在我的 data table 中 通过公共列与查找表合并index1 index2 然后从这个新的值key柱子 a b c 我想生成 3 个新列 a b c 索引valuedata table 中的列 我的 data