我在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"]
第二个数据表用作一个键,其中的字母对应于另一个数据表中的哪个数字。
感谢。
答案 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