基于另一列R data.table添加列

时间:2016-01-13 02:50:54

标签: r data.table

我在R中有两个数据表:

#install.packages("data.table")
library(data.table)
dt1 <- data.table(Num = c(1,1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5))
dt2 <- data.table(Num = 1:5, Letter = c('A','B','C','D','E'))

我想基于dt2向第一个数据表添加一列,因此它将有两列:

dt1 <- dt1[,Letter := "THIS WILL CONTAIN AN 'A' FOR EVERY '1', 'B' FOR EVERY '2', ETC"]

第二个数据表用作一个键,其中的字母对应于另一个数据表中的哪个数字。

感谢。

3 个答案:

答案 0 :(得分:4)

setkey(dt1, Num)
setkey(dt2, Num)
dt2[dt1]
    Num Letter
 1:   1      A
 2:   1      A
 3:   1      A
 4:   2      B
 5:   2      B

答案 1 :(得分:3)

我们可以join使用on

library(data.table)#v1.9.6+
dt2[dt1, on ="Num"]

为了在“dt1”中创建“Letter”列,我们不需要“dt2”

dt1[, Letter:= LETTERS[Num]]

答案 2 :(得分:2)

其他答案中方法的缺点是dt1未更新,结果仅打印到控制台。您可以通过引用更新dt1,如下所示:

dt1[dt2, lttr := Letter, on="Num"]

这给出了以下结果:

> dt1
    Num lttr
 1:   1    A
 2:   1    A
 3:   1    A
 4:   2    B
 5:   2    B
 6:   2    B
 7:   2    B
 8:   3    C
 9:   3    C
10:   3    C
11:   3    C
12:   3    C
13:   3    C
14:   4    D
15:   4    D
16:   4    D
17:   4    D
18:   4    D
19:   4    D
20:   4    D
21:   5    E
22:   5    E
23:   5    E