2015-11-03 7 views
0

У меня возникли трудности с поиском имен, которые имеют точку в них с помощью grep. он не может их найти. У меня нет проблем с именами без точек. я имею в виду такие имена, как: «J.D. Дрю», я попытался следующий код:трудности с поиском имен, у которых есть точка в них с grep

grepl("J.D. Drew" ,data_player$name) 

заранее спасибо

+0

Вы можете использовать 'fixed = TRUE' в' grepl() ', когда ищете точные строки. Это тоже быстрее. –

ответ

1

Вы должны избежать этих точек. Поскольку grepl (без fixed=TRUE аргумент) должен принимать регулярное выражение в качестве первого аргумента. Точка в регулярном выражении соответствует любому символу. IN-to, чтобы соответствовать буквальной точке, вам нужно избежать их в части регулярного выражения. Или вы можете использовать обугленный класс для лечения таких, как буквенные, как [.]

grepl("J\\.D\\. Drew" ,data_player$name) 
+0

Спасибо за ваш ответ, на самом деле мой grep находится в цикле, который получает строку каждый раз. Я хочу, чтобы это было автоматически, потому что я не знаю, сколько пунктирных имен в моих 1000 именах – alireza

+0

неясно, подумайте, что вы можете использовать 'fixed = T' –

0

Я думаю, что вы ищете что-то вроде этого, чтобы найти любое имя (строку) в переменном с точкой в ​​нем?

# example data frame 
data_player <- data.frame(name=c("Judith","J.D.Drew","S.Harris","Simon"),stringsAsFactors = F) 

# version 1 with your mentioned loop 
for(i in 1:nrow(data_player)){ 
    if(grepl("(\\.)+",data_player$name[i])) print(data_player$name[i]) 
} 

# version 2 without a loop 
data_player$name[which(grepl("(\\.)+",data_player$name))] 

Надеюсь, это поможет!