2015-06-15 167 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))