2015-06-15 113 views
2

我有一个房屋销售交易data.frame。目前地址格式。拆分逗号分隔的地址

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" 

,我还需要内()删除邮编,因为我已经有这个在一个单独的领域。

+0

欢迎来到SO。你应该提供一个可重复的例子,展示你到目前为止试过的东西。请阅读[this](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – agstudy

+0

数据是如何导入的?为什么不使用'read.csv()'? – zx8754

回答

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

对于你的榜样,

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

使用strsplit()如下,

strsplit(a,",") 

这给出一个你可以unlist()如果你想要的列表。

[[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

,你也可以尝试使用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

这也可以用'read.table'轻松完成。 'read.table(text = as.character(df $ address),sep =',',stringsAsFactors = FALSE)' – akrun

+0

为什么'fixed = FALSE'? –

0

这可能不是来完成你需要的东西(有几个原因)的最佳方式,但它应该是非常容易理解的。这假定你的数据框被命名为df,并且地址字符串位于名为Address的变量中。

首先确保您的地址存储为字符串:如果class(df$Address)回报"factor",而不是"character",你可以将它们的地址转换成字符串与

df$Address <- as.character(df$Address) 

拆分上逗号字符:

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

(注意这里假定可能有或没有围绕您想要删除的逗号的空格;如果确实没有空格,那么您可以用012代替。)

然后把所得的各场为一个新的变量,通过施加到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]})) 

(你可以实际

df$splitAdd <- NULL 
:如果你想从数据框中删除 splitAdd列可能做不 unlist为你所描述的东西,但有时可以更方便)

0

您可以使用read.csv(假设在这个例子中,你的数据帧被称为mydf和可变拆分为address

(针对你的编辑,你可以使用下面的删除括号和任何在你分开变量之前)

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