首页 > 解决方案 > 在数据表 R 上查找内部值

问题描述

我有一个带有两个标识符和一个值的数据表,如下所示:

dt <- data.table(id=LETTERS[1:8], id_opposite=c("B","A","H","D", "F","C", "E","G"), value = 1:8)
dt
   id id_opposite value
1:  A           B     1
2:  B           A     2
3:  C           H     3
4:  D           D     4
5:  E           F     5
6:  F           C     6
7:  G           E     7
8:  H           G     8

我想添加一个包含对应于 id_opposite 的值的列。所以对于第一行,这将是 2,对于第二行,它将是 1。即我想要的输出是这样的:

  id id_opposite value value_opposite
1  A           B     1              2
2  B           A     2              1
3  C           H     3              8
4  D           D     4              4
5  E           F     5              6
6  F           C     6              3
7  G           E     7              5
8  H           G     8              7

我知道我可以通过从 dt 构造一个查找表,然后将它与 dt 合并来做到这一点,但是有没有办法在数据表中做,比如

dt[, value_opposite := dt[some-function-of-id_opposite-and-value]]

感谢您有任何建议!

标签: rdatatablelookup

解决方案


对于这种特殊情况:

dt$value_opposite <- match(dt$id_opposite, dt$id)

但是,如果您的值与索引不同,您也可以这样做:

dt$value_opposite <- dt$value[match(dt$id_opposite, dt$id)]
dt
   id id_opposite value value_opposite
1:  A           B     1              2
2:  B           A     2              1
3:  C           H     3              8
4:  D           D     4              4
5:  E           F     5              6
6:  F           C     6              3
7:  G           E     7              5
8:  H           G     8              7

推荐阅读