Если у меня есть data.tables
DT
и neighbors
:
set.seed(1)
library(data.table)
DT <- data.table(idx=rep(1:10, each=5), x=rnorm(50), y=letters[1:5], ok=rbinom(50, 1, 0.90))
n <- data.table(y=letters[1:5], y1=letters[c(2:5,1)])
n
- это справочная таблица. Всякий раз, когда ok == 0
, я хочу найти соответствующий y1
в n
и использовать это значение для x
и заданного idx
. В качестве примера, строка 4 DT:
> DT
idx x y ok
1: 1 -0.6264538 a 1
2: 1 0.1836433 b 1
3: 1 -0.8356286 c 1
4: 1 1.5952808 d 0
5: 1 0.3295078 e 1
6: 2 -0.8204684 a 1
y1
из n
для d
- e
:
> n[y == 'd']
y y1
1: d e
и idx
для строки 4 равно 1. Поэтому я бы использовал:
> DT[idx == 1 & y == 'e', x]
[1] 0.3295078
Я хочу, чтобы мой вывод был data.table
, как и DT[ok == 0]
со всеми значениями x
, замененными их соответствующим значением n ['y1'] x
:
> output
idx x y ok
1: 1 0.3295078 d 0
2: 2 -0.3053884 d 0
3: 3 0.3898432 a 0
4: 5 0.7821363 a 0
5: 7 1.3586800 e 0
6: 8 0.7631757 d 0
Я могу придумать несколько способов сделать это с базой R или с помощью plyr
... и, возможно, ее опозданием в пятницу... но независимо от того, какие последовательности слияний, которые потребуются в data.table
, вне меня