我试图在R中确定如何拆分具有多个分隔符的多个字段的列。
从API中,我在名为“Location”的数据框中得到一列。它中有多个位置标识符。这是一个条目的示例。 (编辑 - 我添加了几个)
6540 BENNINGTON AVE
Kansas City, MO 64133
(39.005620414000475, -94.50998643299965)
4284 E 61ST ST
Kansas City, MO 64130
(39.014638172000446, -94.5335298549997)
3002 SPRUCE AVE
Kansas City, MO 64128
(39.07083265200049, -94.53320606399967)
6022 E Red Bridge Rd
Kansas City, MO 64134
(38.92458893200046, -94.52090062499968)
所以上面是第1-4行的栏目“location”。
我希望将其拆分为地址,城市,州,邮政编码,长列和纬度列。某些字段由空格或制表符分隔,而其他字段由逗号分隔。也没有固定的宽度。
我看过reshape包 - 但似乎我需要一个单一的分隔符。我不能使用空间(或者我可以?),因为地址中有空格。
思想?
答案 0 :(得分:2)
如果您拥有的数据不是这样的,请通过添加我们可以复制并粘贴到R中的代码来让每个人都知道以重现您的数据(请参阅如何轻松地将此样本数据复制并粘贴到R中?)
示例数据:
location <- c(
"6540 BENNINGTON AVE
Kansas City, MO 64133
(39.005620414000475, -94.50998643299965)",
"456 POOH LANE
New York City, NY 10025
(40, -90)")
location
#[1] "6540 BENNINGTON AVE\nKansas City, MO 64133\n(39.005620414000475, -94.50998643299965)"
#[2] "456 POOH LANE\nNew York City, NY 10025\n(40, -90)"
解决方案:
# Insert a comma between the state abbreviation and the zip code
step1 <- gsub("([[:alpha:]]{2}) ([[:digit:]]{5})", "\\1,\\2", location)
# get rid of parentheses
step2 <- gsub("\\(|\\)", "", step1)
# split on "\n", ",", and ", "
strsplit(step2, "\n|,|, ")
#[[1]]
#[1] "6540 BENNINGTON AVE" "Kansas City" "MO"
#[4] "64133" "39.005620414000475" "-94.50998643299965"
#[[2]]
#[1] "456 POOH LANE" "New York City" "NY" "10025"
#[5] "40" "-90"
答案 1 :(得分:2)
以下是stringr
包的示例。
使用上面的@ Frank示例数据,您可以执行以下操作:
library(stringr)
address <- str_match(location,
"(^[[:print:]]+)[[:space:]]([[:alpha:]. ]+), ([[:alpha:]]{2}) ([[:digit:]]{5})[[:space:]][(]([[:digit:].-]+), ([[:digit:].-]+)")
address <- data.frame(address[,-1]) # get rid of the first column which has the full match
names(address) <- c("address", "city", "state", "zip", "lat", "lon")
> address
address city state zip lat lon
1 6540 BENNINGTON AVE Kansas City MO 64133 39.005620414000475 -94.50998643299965
2 456 POOH LANE New York City NY 10025 40 -90
请注意,这非常特定于给定的一个条目的格式。如果有多种方式存在差异,则需要进行调整。
这将从字符串的开头到第一个[:space:]字符为address
。直到下一个逗号的下一组字母,空格和句点被赋予city
。在逗号和空格之后,接下来的两个字母将被赋予state
。在空格后,接下来的五位数组成zip
字段。最后,下一组数字,句号和/或减号分别被分配到lat
和lon
。