当前位置: 首页 > 知识库问答 >
问题:

在data.table中添加列,并在另一个data.table中查找值(基于两个相似的列)

东方辉
2023-03-14

我有一个关于根据另一个数据表中的信息向数据表中添加列的问题

我的数据是这样的:

数据表 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

现在,如果我想基于另一列添加一列,我将在datatable中使用以下函数:

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

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

共有1个答案

夏侯星洲
2023-03-14

帮助页面 ?data.表 说明了 on 参数:

指示< code>i中的哪些列应该与< code>x中的列连接,以及要连接的二元运算符的类型。指定时,这将覆盖在< code>x和< code>i上设置的键。有多种方法可以指定on参数:

    < li >作为字符向量,例如< code>X[Y,on=c("a "," b")]。这假定这两列都存在于< code>X和< code>Y中。 < li >作为命名的字符向量,例如< code>X[Y,on=c(x="a ",y="b")]。当两个表之间要连接的列名不同时,这很有用。< br >注意:如果列< code >“a”在两个表之间是公共的,则< code>X[Y,on=c("a ",y="b")]也是可能的。 < li >为了在交互场景中方便起见,也可以使用< code >。()语法为< code>X[Y,on=。(a,b)]。

(它还推荐渐晕二级索引和自动索引。)

因此,这可能是两列上的连接:

dt.1[dt.2, on = .(TeamcodeHome = Teamcode, Season), RedCardsHome := Red][]
   TeamcodeHome TeamcodeAway GoalsHome GoalsAway Season RedCardsHome
1:            1            2         5         0   2006            4
 类似资料:
  • 对于虚拟数据集 现在数据集看起来像这样: 3列。对于每个团队,他们在不同的列中有团队成员和团队领导。团队可能只有成员而没有领导者,反之亦然。 以下是我几乎想要的输出: 我希望将两列合并成一列,如果其中一列是团队领导,则添加一个标记。 我有一个丑陋的解决方案, <代码>dt1 问题: > 我认为,这种解决方案不是有效的,先合并,然后融化。那么,还有其他方法吗? 在第3行和第4行有重复的行。 当我试图

  • 我使用数据表来存储数据。我试图弄清楚每行中的某些列是否是唯一的。我想在data.table中添加一列,如果有重复值,该列将保存值“重复值”,如果没有重复值,该列将为NA。我要检查重复的列名存储在一个字符向量中。例如,我创建了我的数据表: 我还有另一个变量,指示需要检查哪些列是否重复。重要的是,我能够将列名存储在字符向量中,而不需要“知道”它们(因为它们将作为参数传递给函数)。 我希望输出是: 如果

  • 我有两个结构相同的data.table。两个键列后跟许多数据列。数据列的数量可能会有所不同。我想将第二data.table的值添加到第一data.table.的相应行/列中 到目前为止,我的最佳选择如下: 请注意,nrow 和 ncol 以及 loc 和产品条目都是可变的,具体取决于源数据。 如果 DT2 中的每一行都与 DT1 中的一行匹配,则此方法有效,否则会产生意外的结果。有没有一种更严格/

  • 我有两个数据。表X和表Y。 列 X: Y 中的值列: 创建两个data.tables: 我设置了 X 和 Y 的键: 现在,我尝试通过X中的< code>id和Y中的< code>ID来连接X和Y: All引发错误,指出参数中的列名无效。 我查阅了data.table的手册,发现< code>merge函数不支持< code>by.x和< code>by.y参数。 如何在不更改列名的情况下通过不同

  • rbindlist做的正是我需要的,但'do.call'做不到! do.Call不是我想要的

  • 问题内容: 我必须按照下面显示的方式创建一个表。我们可以这样创建吗?(如是) 表名称:样本 其中包含多个值的类别归档。 以及我们如何搜索类别4出现在表格的哪一行。 问题答案: 您无法创建嵌套表。而且您想到的并不是设计这样的桌子的好主意。您应该有两个表(如果是category,则恰好三个 表 包含描述)。一个用于,第二个表保存 每个产品 的 类别 。示例设计如下所示, 和填充样本记录 SQLFidd