在R中的data.table中,如何在数据表中创建一个值与列元素和另一个表匹配并相对应的新列?

时间:2019-01-15 11:51:44

标签: r data.table

我目前有两个表:

  A  B
3.3 10
2.5 11
6.7 11
6.0 12
5.4 12
3.5 12
6.5 13
8.0 13

  B Val
 10   0
 11   1
 12   2
 13   3

要做的是在第一个表中创建一个新列C,以使其包含值Val,该值对应于第一个表中B的每个元素,该值与第二个表中的B匹配。我想获得:

  A  B C
3.3 10 0
2.5 11 1
6.7 11 1
6.0 12 2
5.4 12 2
3.5 12 2
6.5 13 3
8.0 13 3

示例代码为:

DT.1 <- data.table(A=c(3.3,2.5,6.7,6.0,5.4,3.5,6.5,8.0), B=c(10,11,11,12,12,12,13,13))
DT.2 <- data.table(B=c(10,11,12,13),Val=c(0,1,2,3))

感谢任何提示或输入。

1 个答案:

答案 0 :(得分:0)

连接部分肯定是重复的。.我包括了这个答案,因为还进行了一些重命名/重新排序。

dt1 <- fread("A  B
3.3 10
2.5 11
6.7 11
6.0 12
5.4 12
3.5 12
6.5 13
8.0 13", header = TRUE)

dt2 <- fread("B Val
10   0
11   1
12   2
13   3", header = TRUE)

result <- dt2[dt1, on = .(B)]
setcolorder(result, c("A", "B", "Val") )
setnames(result, old = "Val", new = "C")

#      A  B C
# 1: 3.3 10 0
# 2: 2.5 11 1
# 3: 6.7 11 1
# 4: 6.0 12 2
# 5: 5.4 12 2
# 6: 3.5 12 2
# 7: 6.5 13 3
# 8: 8.0 13 3