2016-05-05 2 views
0

Я пытаюсь закодировать код Stata на R, и я не могу найти эквивалент joinby() на R. joinby() объединяет 2 набора данных по горизонтали, но формирует все попарные комбинации внутри группы.Эквивалент Stata joinby() на R?

У меня есть два кадра данных: один из 100 больниц и другой из 10 000 врачей общей практики. Мне нужно было бы сопоставить всех врачей общей практики с каждой больницей - в итоге у меня получилось бы 100 * 10 000 = 1 000 000 строк в моем результирующем фрейме после комбинации.

Любое предложение?

+2

'expand.grid' или' data.table :: CJ' – eddi

ответ

1

Может быть более сжатый метод, но следующее должно работать, скажем, ваш больничный data.frame, hospDf, уникален больницей, как и доктор docDf. Вы можете использовать expand.grid получить data.frame всех комбинаций больничного врача:

hospDocDf <- expand.grid(hospDf$hospID, docDf$docID) 

Затем слейте оба data.frames на этот:

hospDocDf <- merge(hospDocDf, hospDf, by="hospID", all.x=TRUE) 
hospDocDf <- merge(hospDocDf, DocDf, by="docID", all.x=TRUE) 

В all.x = TRUE аргумент не необходимо, но ничего не повредит.

1

Использовать слияние кросс-соединения, которое по существу является слиянием без аргумента by. Это возвратит декартово произведение между обоими устанавливает 100 X 10000?:

df <- merge(hospitaldata, gpsdata) 
+0

любопытный ответ, но очень медленно по сравнению с 'expand.grid' – eddi

+0

Works для моих нужд! OP может определить ключ того же значения 'hospitaldata $ key <- 1' в обоих наборах данных и использовать ключ в аргументе' by'. – Parfait

Смежные вопросы