У меня есть два кадра данных d1
и d2
. d2
имеет столбец, который содержит данные, которые я бы предпочел добавить к d1
.Вставка значений столбца из одного кадра данных в другой при соблюдении данного условия
Каждый из кадров данных имеет равное количество строк и столбцов.
> d1
t1 t2 numVehicles avgByRunRep
1 0.2 0.3 10 225.5000
2 0.2 0.4 10 219.6667
3 0.2 0.5 10 205.1667
4 0.2 0.6 10 220.6667
5 0.2 0.7 10 205.1667
> d2
t1 t2 numVehicles avgLostPerRep
1 0.2 0.3 10 14.333333
2 0.2 0.4 10 9.000000
3 0.2 0.5 10 8.000000
4 0.2 0.6 10 8.000000
5 0.2 0.7 10 6.833333
Поэтому я хотел бы значения в d2
«ы avgLostPerRep
столбца быть "передано", чтобы d1
путем сопоставления t1
, t2
, numVehicles
.
Таким образом, в конце концов d1
будет выглядеть примерно так:
> d1
t1 t2 numVehicles avgByRunRep avgLostPerRep
1 0.2 0.3 10 225.5000 14.333333
2 0.2 0.4 10 219.6667 9.000000
3 0.2 0.5 10 205.1667 8.000000
4 0.2 0.6 10 220.6667 8.000000
5 0.2 0.7 10 205.1667 6.833333
Также можно сохранить окончательный результирующий кадр данных в другой переменной d3
, если это делает никакой разницы вообще.
Я хотел бы знать, как это можно решить с помощью sqldf
, но чистый R
в порядке.
Я пробовал merge
от R, но получил большую кадр данных с большим количеством NA
. Я также пробовал UPDATE
и INSERT INTO
за sqldf
безрезультатно.
'merge (d1, d2, by = c ('t1', 't2', 'numVehicles'))' дает ожидаемый результат, хотя, или используя библиотеку 'data.table'' (data.table), setkey (setDT (d1), t1, t2, numVehicles) [d2] ' – akrun
Я просто попробовал это:' temp <- merge (d1, d2, all.x = T, sort = F) ', и я получил ожидаемый результат. Не могли бы вы объяснить разницу между этими двумя командами и как они работают? – cross
просто 'merge (d1, d2)' также работает в данных примера, так как общие столбцы в обоих наборах данных используются в 'by ='. Не могли бы вы показать код, который не сработал? – akrun