如何在R中检查字符串是否包含罗马数字?

5

我在我的数据集“ad”中有一个住宅地址列。我想检查哪些地址没有数字(包括罗马数字)。 我正在使用

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

如何标记那些包含罗马数字的地址?针对没有数字出现的地址,我该如何处理?

例如:"ABC城市,DLF大厦III栋X楼"


我们地址列中的结构是否是同质的?例如,它总是“楼层#,建筑#,城市”吗?数字后面是否跟着逗号? - Val
3
这个链接可能会有帮助:https://dev59.com/LnVC5IYBdhLWcg3whRgw?rq=1 - De Novo
不,它不是同质的。数字可能会有逗号,也可能没有。它也可以是“III DLF XI楼”。 - Priya T
1个回答

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”的公司也会被标记为罗马数字。您可以将我的方法与this answer相结合,进一步测试符号是否按正确顺序排列。
请在您的数据上进行测试并报告其是否有效。

就像你所说的,这取决于数据,但空格可能是解决方案。例如,数据包含一个不是罗马数字的“V”的可能性要高得多,而不是它是否包含一个不是罗马数字的“V”。 - De Novo
以上检查适用于所有地址(无论它们是否有罗马数字)。如果一个地址包含罗马数字,它将具有前导和尾随空格。 - Priya T
第一个答案是无意义的。我链接的答案关注的是字母的顺序,而不是它们是否在字符串中。新的答案应该有效,并且已经在你提供的示例和我添加的一个没有罗马数字的示例上进行了测试。 - JBGruber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接