基于另一列R data.table添加列
我在R中有两个数据表:基于另一列R data.table添加列,r,data.table,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
#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"]
第二个数据表用作另一个数据表中哪个字母对应哪个数字的键
谢谢。我们可以在上加入使用
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
为了在dt1中创建字母列,我们不需要dt2
dt1[, Letter:= LETTERS[Num]]
其他答案中的方法的缺点是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
如果第二个数据表没有列Num作为参考,只有字母怎么办?@abbas786,在这种情况下,您可以将字母转换为数字,即as.numericfactorleters`获取序列,即dt2[,Num:=as.numericfactorLetter]然后加入或者甚至不在更新中使用dt2。我尽量不说得太具体,因为我希望最终能弄明白。我不能这样做,因为对于我的数据集,字母实际上是对应于特定数字的字符ID。所以每个1都是AFFY1,每个2都是AFFY2。我还需要将数字添加到已经有数字的数据表中,而不是将数字添加到字母中。@abbas786在这种情况下,可以使用as.numericfactor方法。如果元素与任何图案都不对应,请指定其中的级别和标签。@abbas786
> 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