【问题标题】:Adding a column in data.table with looking up a value in another data.table (based on TWO similar columns)在 data.table 中添加一列并在另一个 data.table 中查找值(基于两个相似的列)
【发布时间】:2017-06-05 14:20:33
【问题描述】:

我有一个关于根据另一个 data.table 中的信息向 data.table 添加列的问题。

这是我的数据的样子:

数据表 1(足球比赛)

 TeamcodeHome TeamcodeAway GoalsHome GoalsAway Season
 1            2            5         0         2006

数据表 2(足球队收到的卡片):

Teamcode Season Red Yellow
1        2005   1   15
2        2005   3   10
1        2006   4   16
2        2006   1   4

现在,如果我想添加基于其他 1 列的列,我将在数据表中使用以下函数:

dt.1[dt.2, on="Teamcode", RedCards:=Red]

但是现在有两个变量需要匹配。团队代码和季节。这是如何运作的?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    帮助页面?data.table 介绍了on 参数:

    指出i 中的哪些列应该与x 中的列连接在一起 与要加入的二元运算符的类型。指定时,这 覆盖在xi 上设置的键。有多种方式 指定参数:

    • 作为字符向量,例如,X[Y, on=c("a", "b")]。这假设这两个列都存在于 XY 中。
    • 作为命名字符向量,例如X[Y, on=c(x="a", y="b")]。当两者之间要连接的列名不同时,这很有用 表。
      注意:如果"a" 列是,X[Y, on=c("a", y="b")] 也是可能的 两个表通用。
    • 为了方便交互场景,也可以使用.()语法为X[Y, on=.(a, b)]

    (它还推荐小插图Secondary indices and auto indexing。)

    所以,这可能是两列的连接:

    dt.1[dt.2, on = .(TeamcodeHome = Teamcode, Season), RedCardsHome := Red][]
    
       TeamcodeHome TeamcodeAway GoalsHome GoalsAway Season RedCardsHome
    1:            1            2         5         0   2006            4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2021-11-27
      • 2014-04-19
      • 2017-02-23
      • 1970-01-01
      相关资源
      最近更新 更多