我有如下数据框。这是一个具有统一外观模式的样本集数据,但整个数据不是很统一:
locationid address
1073744023 525 East 68th Street, New York, NY 10065, USA
1073744022 270 Park Avenue, New York, NY 10017, USA
1073744025 Rockefeller Center, 50 Rockefeller Plaza, New York, NY 10020, USA
1073744024 1251 Avenue of the Americas, New York, NY 10020, USA
1073744021 1301 Avenue of the Americas, New York, NY 10019, USA
1073744026 44 West 45th Street, New York, NY 10036, USA
我需要从这个地址找到城市和国家的名字。我尝试了以下方法:
1) strsplit
这给了我一个列表,但我无法从中访问最后一个或倒数第三个元素。
2) 正则表达式
找国家很容易
str_sub(str_extract(address, "\\d{5},\\s.*"),8,11)
但对于城市
str_sub(str_extract(address, ",\\s.+,\\s.+\\d{5}"),3,comma_pos)
我找不到
comma_pos
因为它再次导致我遇到同样的问题。我相信有一种更有效的方法可以使用上述任何一种方法来解决这个问题。
最佳答案
拆分数据
ss <- strsplit(data,",")`
然后
n <- sapply(s,len)
将给出元素的数量(所以你可以向后工作)。然后
mapply(ss,"[[",n)
给你最后一个元素。或者你可以做
sapply(ss,tail,1)
获取最后一个元素。
要获得倒数第二(或更普遍),您需要
sapply(ss,function(x) tail(x,2)[1])
关于regex - 提取逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27172007/