Как проверить, содержит ли строка римские цифры в R?

У меня есть столбец для адресов проживания в моем наборе данных "объявление". Я хочу проверить адреса, на которых нет цифр (включая римские цифры). я использую

ad$check <- grepl("[[:digit:]]",ad$address)

отмечать адреса без цифр. Как мне сделать то же самое с адресами, содержащими римские цифры?

Например: «этаж X, DLF Building- III, ABC City».


person Priya T    schedule 07.03.2018    source источник
comment
однородна ли структура в нашем адресном столбце? Например. всегда ли это этаж №, № здания, город? И после цифр запятые?   -  person Val    schedule 07.03.2018
comment
stackoverflow.com/questions/267399/ может быть полезным   -  person De Novo    schedule 07.03.2018
comment
Нет, это не однородно. За числами могут ставиться запятые, а после них - нет. Это может быть и III этаж DLF XI.   -  person Priya T    schedule 07.03.2018


Ответы (1)


Вам нужно создать строку регулярного выражения.

Изменить (мой первый ответ был чепухой):

x <- c("floor Imaginary,  building- Momentum, ABC City", "floor X, DLF Building- III, ABC City")
# here come the regex 
grepl("\\b[I|V|X|L|C|D|M]\\b", x, ignore.case = FALSE)
[1] FALSE  TRUE

Чтобы разбить это:

\\b - границы слов. Это означает, что перед римскими цифрами должны стоять пробелы, знаки препинания или начало / конец строки.

[I|V|X|L|C|D|M] искомое «слово» может состоять только из символов, используемых для римских цифр. Насколько я знаю, это должно быть все.

ignore.case = FALSE это стандарт, который обычно устанавливается, если вы опускаете эту опцию. Однако я считаю более безопасным упомянуть об этом прямо, если это важно для данной операции.

Используйте с осторожностью, так как компания под названием, например, "LCD Industries" также будет помечена римскими цифрами. Вы можете объединить мой подход с этим ответом, чтобы дополнительно проверить правильность расположения символов.

Пожалуйста, проверьте свои данные и сообщите, работает ли это.

person JBGruber    schedule 07.03.2018
comment
как вы говорите, это будет зависеть от данных, но пробел может быть здесь решением. Например, вероятность того, что данные содержат V, не являющуюся римской цифрой, намного выше, чем вероятность того, что они содержат V, не являющуюся римской цифрой. - person De Novo; 07.03.2018
comment
Вышеупомянутая проверка верна для всех адресов (независимо от того, имеют ли они римские цифры или нет). Если адрес содержит римские цифры, перед ним и в конце будут пробелы. - person Priya T; 07.03.2018
comment
Первый ответ был чепухой. Ответ, который я связал, касался порядка букв, а не того, находятся ли они в строке. Новый ответ должен работать и был протестирован на приведенном вами примере и на примере, который я добавил без римских цифр. - person JBGruber; 07.03.2018