2015-09-29 5 views
-1

У меня есть эта двойная работа цикла:Оптимизировать двойную петлю в R

for (i in 1:nrow(doe)) { 
    for (j in 1:nrow(rsm)) { 
    if (rsm[j,2] == doe[i,2] & rsm[j,3] == doe[i,3] & rsm[j,4] == doe[i,4]) { 
     out <- cbind(doe[i,6], rsm[j,6]) 
     matching_out <- rbind(matching_out, out) 
     break 
    } 
    } 
} 

Как вы можете видеть, что я должен соответствовать три столбцу вместе два набора данных (# 2, 3, 4 в данном случае), а затем cbind столбец 6 двух кадров данных в другом.

Вопрос в том, что это довольно медленно, как я могу его оптимизировать? Полагаю, я мог бы использовать подход, похожий на apply, но я не могу понять.

+0

Взгляните на dplyr-х [присоединяется] (https://cran.r-project.org/web/packages/dplyr /vignettes/two-table.html). – Tutuchan

+1

Попробуйте сделать воспроизводимый и пример и показать желаемый результат. –

+0

Основным узким местом здесь является строка 'matching_out <- rbind (matching_out, out)'. Взгляните на раздел 2 http://www.burns-stat.com/pages/Tutor/R_inferno.pdf – konvas

ответ

1

Вы можете просто сделать эту операцию с основанием R Однострочник:

merge(rsm, doe, by.x=names(rsm)[2:4],by.y=names(doe)[2:4])[-(1:3)] 
Смежные вопросы