Полагаю, вопрос не говорит полной истории.
Допустим, у нас есть 2 списка, один - список из одного слова поиска, а другой - список из нескольких слов
Ex.
data.lookup <- c('one', 'two', 'three')
data.real <- c('somewhere one day', 'mysterious elephants', 'two apple-pies',
'love three corner', 'coffee break', 'three cats')
Теперь мы хотим проверить, содержит ли каждый элемент в data.real слова из data.lookup или нет.
Например, «где-то один день» содержит «один»
Затем мы сохраняем «один» с тем же индексом, что и «где-то один день»
В настоящее время у меня есть эта функция, которая делает именно это.
checkFromList <- function (data.lookup, data.real) {
df <- data.frame('sentence' = data.real, 'lookup' = 1:length(data.real))
for (lookup in data.lookup) {
iter <- 1 #set iteraetion
for (sentence in data.real) {
#If match then append
if (grepl(lookup, sentence) == TRUE) {
df[iter,2] <- lookup
}
iter <- iter + 1
}
}
iter = 1 #set itereation
for (word in df[,2]) {
if (is.element(word, data.lookup) == FALSE ) {
df[iter, 2] <- 'nan'
}
iter <- iter + 1
}
return (df)
}
Запуск этой функции:
checkFromList(data.lookup, data.real)
Выход:
Я знаю, с точки зрения производительности эта функция невелика (слишком много для цикла).
Я прошу совета, как улучшить мой код. Где-нибудь я могу написать это лучше?
Кроме того, некоторые из вас могут подумать, что возникнет проблема, если в предложении будет более 2 поисковых слов. Данные, с которыми я работаю, содержат только 3 слова в предложении, и вероятность того, что в предложении будет более 2 поисковых слов, очень мала.
Цените всю помощь и советуйте!