Моих данных, как показано ниже:Как мне сделать это вложенным для работы петли быстрее
txt$txt:
my friend stays in adarsh nagar
I changed one apple one samsung S3 n one sony experia z.
Hi girls..Friends meet at bangalore
what do u think of ccd at bkc
У меня есть исчерпывающий список названий городов. Листинг некоторые из них ниже:
city:
ahmedabad
adarsh nagar
airoli
bangalore
bangaladesh
banerghatta Road
bkc
calcutta
Я ищу название городов (из списка «города» у меня есть) в txt$txt
и извлекая их в другой столбец, если они присутствуют. Таким образом, простой цикл ниже работает для меня ... но это занимает много времени на большом наборе данных.
for(i in 1:nrow(txt)){
a <- c()
for(j in 1:nrow(city)){
a[j] <- grepl(paste("\\b",city[j,1],"\\b", sep = ""),txt$txt[i])
}
txt$city[i] <- ifelse(sum(a) > 0, paste(city[which(a),1], collapse = "_"), "NONE")
}
Я попытался использовать функцию apply, и это максимум, на который я мог бы добраться.
apply(as.matrix(txt$txt), 1, function(x){ifelse(sum(unlist(strsplit(x, " ")) %in% city[,1]) > 0, paste(unlist(strsplit(x, " "))[which(unlist(strsplit(x, " ")) %in% city[,1])], collapse = "_"), "NONE")})
[1] "NONE" "NONE" "bangalore" "bkc"
Desired Output:
> txt
txt city
1 my friend stays in adarsh nagar adarsh nagar
2 I changed one apple one samsung S3 n one sony experia z. NONE
3 Hi girls..Friends meet at bangalore bangalore
4 what do u think of ccd at bkc bkc
Мне нужен более быстрый процесс в R, который делает то же самое, что и цикл for выше. Пожалуйста, порекомендуйте. Благодаря
Обратите внимание, что это найти только первый матч, поэтому он не будет найти, например, «Бангалора» и «airoli», если оба присутствуют в одной и той же строке. Вместо этого следует использовать stri_extract_all_regex – digEmAll