拆分以逗号分隔的地址

时间:2015-06-15 09:15:49

标签: r

我有房屋销售交易的数据框架。目前地址是格式化的。

  1 Accacia Avenue,This Town,This City,A10 1AA.

有没有办法可以将其拆分为data.frame中同时删除,的不同列?

我现在创建了一个单独的向量,只包含地址。

存储在Dataframe的地址列中的地址 - data

head(data$Address)
[1] 22 Amesbury Road, Feltham (TW13 5HJ)
[2]Flat 11, Gloucester Court, Links Road, London (W3 0EW)

我需要将其拆分为

"Address1", "Address2", "Address3"

我还需要删除()中的邮政编码,因为我已在单独的字段中将其删除。

5 个答案:

答案 0 :(得分:3)

library(tidyr)
df <- data.frame(address = c("1 Accacia Avenue,This Town,This City,A10 1AA"))
separate(df , address , c("country" , "town" , "city" , "street") , ",")



# country             town      city      street
# 1 Accacia Avenue This Town This City   A10 1AA

这些是虚拟列,您可以根据地址更改列名

答案 1 :(得分:3)

您也可以尝试使用splitstackshape

# using df from Nader Hisham's answer

library(splitstackshape)
out = setnames(cSplit(df, "address", ","), c("country", "town", "city", "street"))

#> out
#            country      town      city  street
#1: 1 Accacia Avenue This Town This City A10 1AA

答案 2 :(得分:1)

对于您的示例,

a  <- c("1 Accacia Avenue,This Town,This City,A10 1AA.")

使用strsplit(),如下所示,

strsplit(a,",")

这会给出一个列表,如果需要,可以将其取消列出(

[[1]]
[1] "1 Accacia Avenue" "This Town"        "This City"       
[4] "A10 1AA."

unlist(strsplit(a,","))

[1] "1 Accacia Avenue" "This Town"        "This City"       
[4] "A10 1AA."  

当然,由于你有一个data.frame(),你需要使用lapply或sapply。如果您提供可重复的示例,我们可以向您展示应用函数如何为您提供所需的内容。

答案 3 :(得分:0)

这可能不是满足您需求的最佳方式(由于多种原因),但它应该相当容易理解。这假设您的数据框名为df,地址字符串位于名为Address的变量中。

首先确保您的地址存储为字符串:如果class(df$Address)返回"factor"而不是"character",则可以使用

将它们转换为字符串
df$Address <- as.character(df$Address)

分割逗号字符上的地址:

df$splitAdd <- strsplit(df$Address, "\\s*,\\s*")

(注意这假设您要删除的逗号周围可能有空格;如果肯定没有空格,那么您可以用"\\s*,\\s*"替换","。)

然后将每个结果字段放入一个新变量,通过向向量的每个元素应用df $ splitAdd一个函数,该函数在适当的索引处提取元素:

df$streetAdd <- unlist(lapply(df$splitAdd, function(x){x[1]}))
df$town <- unlist(lapply(df$splitAdd, function(x){x[2]}))
df$city <- unlist(lapply(df$splitAdd, function(x){x[3]}))
df$code <- unlist(lapply(df$splitAdd, function(x){x[4]}))

(对于你所描述的内容,你实际上可能没有unlist,但它有时会更方便。)

如果您想从数据框中删除splitAdd列:

df$splitAdd <- NULL

答案 4 :(得分:0)

您可以使用read.csv(假设此示例中您的数据框称为mydf,要拆分的变量为address

(为了响应您的编辑,您可以在拆分变量之前使用以下内容删除括号及其中的任何内容)

mydf$address <- gsub(' \\(.*?\\)', '', mydf$address)
mydf <- cbind(mydf, read.csv(text=as.character(mydf$address), header = F))