R 拆分以逗号分隔的地址
我有一个房屋销售交易的数据框架。目前地址是格式的R 拆分以逗号分隔的地址,r,R,我有一个房屋销售交易的数据框架。目前地址是格式的 1 Accacia Avenue,This Town,This City,A10 1AA. 有没有办法在data.frame中将其拆分为不同的列,同时删除, 我现在已经创建了一个单独的向量,只包含地址 中的地址存储在数据帧-数据的Address列中 head(data$Address) [1] 22 Amesbury Road, Feltham (TW13 5HJ) [2]Flat 11, Gloucester Court, Links R
1 Accacia Avenue,This Town,This City,A10 1AA.
有没有办法在data.frame中将其拆分为不同的列,同时删除,
我现在已经创建了一个单独的向量,只包含地址
中的地址存储在数据帧-数据的Address列中
head(data$Address)
[1] 22 Amesbury Road, Feltham (TW13 5HJ)
[2]Flat 11, Gloucester Court, Links Road, London (W3 0EW)
我需要把它分成两部分
"Address1", "Address2", "Address3"
我还需要删除()
中的邮政编码,因为我已经在一个单独的字段中删除了它。库(tidyr)
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
df以你为例
a <- c("1 Accacia Avenue,This Town,This City,A10 1AA.")
这将提供一个列表,如果需要,可以取消该列表()
[[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(),所以需要使用lappy或sapply。如果您提供了一个可复制的示例,我们可以向您展示应用函数如何满足您的需求。您也可以尝试使用splitstackshape
[[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."
# 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
这可能不是实现所需的最佳方式(有几个原因),但它应该相当容易理解。这假设您的数据帧名为df
,地址字符串位于名为address
的变量中
首先确保您的地址存储为字符串:如果class(df$Address)
返回“factor”
而不是“character”
,则可以使用
df$Address <- as.character(df$Address)
(实际上,对于您所描述的内容,您可能不需要取消列表
,但有时会更方便。)
如果要从数据帧中删除splitAdd
列:
df$splitAdd <- NULL
df$splitAdd欢迎加入SO。你应该提供一个可复制的例子,展示你迄今为止尝试过的东西。请阅读数据是如何导入的?为什么不使用read.csv()
?这也可以通过read.table
轻松完成read.table(text=as.character(df$address),sep=',,stringsAsFactors=FALSE)
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