Извините, я не знаю, как правильно озаглавить мой вопрос.Это легче понять на примере.
Пример данных
Рассмотрим следующий пример.
> l_ids=as.data.frame(cbind(a=c("strong","intense","intensity"),
id=c("1","2","3"),new_id=c("","1","2")),stringsAsFactors = FALSE)
a id new_id
1 strong 1
2 intense 2 1
3 intensity 3 2
Я хотел бы обновить id
каждого слова в a
с помощью new_id
, если это применимо.Рассмотрим это как словарь синонимов.Когда я перебираю new_id
;
> for (i in 1:nrow(l_ids)){
+ if (nchar(l_ids$new_id[i])>0){
+ l_ids$id[i]=l_ids$new_id[i]
+ }
+ }
> l_ids
a id new_id
1 strong 1
2 intense 1 1
3 intensity 2 2
Проблема в том, что я хотел бы, чтобы intensity
также получил 1
.Есть ли способ сделать это без необходимости повторять несколько раз?
Обновление на фоне
У меня есть документ, в котором у меня есть список синонимов.Это синонимы, относящиеся только к сфере применения проблемы.Пример:
> dictionary
good bad
1 strong intense
2 intense intensity
3 light soft
Затем мне дается список слов, каждое с заданным id
.Моя задача - проверить, есть ли какое-либо из этих слов в столбце bad
dictionary
, и, если это так, обновить его, указав id
слова слева от него.Как видно, для intensity
потребуется два шага, чтобы стать strong
(слово good
в словаре).Есть ли способ сделать это без необходимости делать несколько итераций?(скажем, for
петля)