【发布时间】:2020-08-10 18:14:35
【问题描述】:
我的目标是识别写在具有其他文本的字符向量中的美国各州,并将各州转换为缩写形式。例如,“北卡罗来纳”到“NC”。如果向量只有长格式的状态名称,这很简单。但是,我的向量在随机位置有其他文本,例如“状态”示例。
states <- c("Plano New Jersey", "NC", "xyz", "Alabama 02138", "Texas", "Town Iowa 99999")
从另一篇文章中我发现了这个:
state.abb[match(states, state.name)]
但它只转换独立的德州
> state.abb[match(states, state.name)]
[1] NA NA NA NA "TX"
而不是新泽西州、阿拉巴马州和爱荷华州的字符串。
来自Fast grep with a vectored pattern or match, to return list of all matches 我试过了:
sapply(states, grep(pattern = state.name, x = states, value = TRUE))
但是
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'Alabama 02138' of mode 'function' was not found
In addition: Warning message:
In grep(pattern = state.name, x = states, value = TRUE) :
argument 'pattern' has length > 1 and only the first element will be used
这也不起作用:
sapply(states, function(x) state.abb[grep(state.name, states)])
这个问题没有帮助: regular expression to convert state names to abbreviations
如何将嵌入的长名称转换为州缩写?
编辑:我想返回向量,唯一的变化是州的长名称已被缩写,例如,“Plano New Jersey”变为“Plano NJ”。
感谢您纠正和/或教育我。
【问题讨论】:
-
您可能会从中得到“纽约,纽约”,此外还有称为“加利福尼亚”的城镇以及州。但是,这对你来说是挑剔的。
-
@Jonathan Leffler:是的,称为州的城镇是一种职业危害。另外,我的城市不止一个州。叹。为什么数据表现不佳?
-
有一个叫做“真实世界”™的东西,你应该在某个时候访问它(“亲爱的水壶 - 你是黑人!签名,锅”)。它有一个讨厌的习惯,与我们这些编写程序的人设计的整洁方案背道而驰。
-
最好在网上搜索“城市,州”名称的表格并将其读入 R 进行匹配。
-
@RichardScriven:好点。我在维基百科上找到了 394 个这样的城市,ST 匹配,创建了一个数据框,也可以使用它。例如,我仍在努力分配哥伦布,因为在几个州都有同名的城市。