0

与えられたdata.table daに、 daの列名と同じ列名を持つ別data.tabledbがあるとします。同じ名前の列の一部は、内容も同じです。私の質問は、の内容と一致する列を持つエントリを置き換える方法です ?dadbdb

もっと簡単に言えば:

require(data.table)
da <- data.table(a=1:10,b=10:1,c=LETTERS[1:10])

## All (a,b) pairs in db exist in da, but c is different.
db <- data.table(a=c(2,6,8),b=c(9,5,3),c=c('x','y','z')) 

## Data table dx will have c-column values of  db$c where (a,b) matches between da and db.
dx <- db[da,.(a,b,c=fifelse(is.na(c),i.c,c),on=c('a','b')]

出力

> dx
     a  b c
 1:  1 10 A
 2:  2  9 x
 3:  3  8 C
 4:  4  7 D
 5:  5  6 E
 6:  6  5 y
 7:  7  4 G
 8:  8  3 z
 9:  9  2 I
10: 10  1 J
> da
     a  b c
 1:  1 10 A
 2:  2  9 B
 3:  3  8 C
 4:  4  7 D
 5:  5  6 E
 6:  6  5 F
 7:  7  4 G
 8:  8  3 H
 9:  9  2 I
10: 10  1 J
> db
   a b c
1: 2 9 x
2: 6 5 y
3: 8 3 z
> dx
     a  b c
 1:  1 10 A
 2:  2  9 x
 3:  3  8 C
 4:  4  7 D
 5:  5  6 E
 6:  6  5 y
 7:  7  4 G
 8:  8  3 z
 9:  9  2 I
10: 10  1 J
> 

上記が私の目標を達成していることは知っていますが、不器用に感じます。これを行う組み込みのdata.table方法はありますか?

4

1 に答える 1

0

わかりました、私はそれを理解しました

dx <- da[db,c:=i.c,on=c('a','b')]
于 2021-03-29T15:23:06.033 に答える