перенумеровать наблюдения в большом фрейме данных

Я имею дело с фреймом данных с более чем 500 000 наблюдений и впервые занимаюсь оптимизацией кода. У меня очень простая проблема, которая убивает меня вовремя, и я искал более быстрое решение.

В моем фрейме данных «d» есть столбец для номеров наблюдений, которые просто идут от 1: nrow (d). По причинам, которые здесь не важны, наблюдения необходимо перенумеровать определенным образом. У меня есть другой фрейм данных, называемый «id», который имеет неправильный номер для наблюдения 1 в столбце 1 и правильный номер в столбце 2. Эти столбцы названы «неправильным» и «правильным» соответственно.

Я пытался изменить нумерацию с помощью цикла:

for(i in 1:nrow(d)){
  d$obs[i] <- id$right[id$wrong==d$obs[i]]
}

Как я уже сказал, это ужасно медленно. Есть идеи для более разумного способа?


person Kevin    schedule 11.02.2015    source источник


Ответы (1)


Это будет быстрее:

 d$obs <- id$right[match(d$obs,id$wrong)]
person Jthorpe    schedule 11.02.2015