Я пытаюсь сделать что-то, что, как мне показалось, будет довольно простым, что поставит меня в тупик.
Скажем, у меня есть следующий фрейм данных:
id <- c("bob_geldof", "billy_bragg", "melvin_smith")
code <- c("blah", "di", "blink")
df <- as.data.frame(cbind(id,code))
> df
id code
1 bob_geldof blah
2 billy_bragg di
3 melvin_smith blink
И еще один такой:
ID1 <- c("bob_geldof", "melvin_smith")
ID2 <- c("the_builder", "kelvin")
alternates <- as.data.frame(cbind(ID1, ID2))
> alternates
ID1 ID2
1 bob_geldof the_builder
2 melvin_smith kelvin
Если строка символов в df $ id совпадает с альтернативами $ ID1, я хотел бы заменить ее альтернативами $ ID2. Если он не совпадает, я бы хотел оставить все как есть.
Конечный df должен выглядеть как
> df
id code
1 bob_the_builder blah
2 billy_bragg di
3 melvin_kelvin blink
Это явно глупый пример, и мой настоящий набор данных требует много замен.
Я включил столбец «код», чтобы продемонстрировать, что я работаю с фреймом данных, а не только с символьным вектором.
Я использовал gsub для их индивидуальной замены, но это отнимает много времени, и список постоянно меняется.
Я посмотрел в str_replace, но, кажется, вы можете указать только одно значение замены.
Любая помощь будет принята с благодарностью.
Ура!
РЕДАКТИРОВАТЬ: не все идентификаторы содержат подчеркивания, и мне нужно сохранить бит, который соответствует. Например. bob_geldolf становится bob_the_builder.
РЕДАКТИРОВАТЬ 2 (!): Спасибо всем за ваши предложения. Я обошёл проблему, объединив фреймы данных (так что есть NA, в которых нет изменений) и создав новые идентификаторы с помощью оператора ifelse. Это немного неуклюже, но это работает!