2017-06-22 44 views
2

我有两个变量的数据框。可以说我的数据框是df,那么这两个变量是df $ id,df $地址。 df $地址包含完整地址,如TT Road,Bhopal,Madhya Pradesh 462003.我有另一个数据框包含10个地方,其中一个是博帕尔。所以我只想在新的专栏中返回博帕尔。这是一个例子,我有超过200000个ID和300个地名。下面 是示例如何从r列中的另一个数据框中的文本列表中返回特定单词

数据帧1:

df <- data.frame(id = c("297308272","297308281","297308299"), address = c("MGROAD, AMBIKAPUR, CH-546453","TT Road, Bhopal, Madhya Pradesh 462003","STREET NO. 2, WHITEFIELD, PALI, RJ")) 

数据帧2:

AD <- data.frame(place = c("Bhopal", "Pali", "Wardha", "AMBIKAPUR", "Anuhul")) 
+0

请澄清一下您的问题。发布'df'和'AD'的预期输出将会很有帮助。 – www

回答

0

让我们通过第一转换data.frame的整个地址列和地方矢量开始小写。

df$address<-tolower(df$address) 

#> df 
# id        address 
#1 297308272   mgroad, ambikapur, ch-546453 
#2 297308281 tt road, bhopal, madhya pradesh 462003 

place<-tolower(place) 

#> place 
# "bhopal" "pali"  "wardha" "ambikapur" 
# [5] "anuhul" 

现在让我们使用“”作为分隔符将字符串拆分为单词。为此,我们将使用R.

listofstrvec<-strsplit(x = df$address,split = " ") 

#> listofstrvec 
# [[1]] 
# [1] "mgroad," "ambikapur," "ch-546453" 

# [[2]] 
# [1] "tt"  "road," "bhopal," "madhya" "pradesh" 
# [6] "462003" 

strsplit现在我们有一个字符串向量的列表。现在我们将尝试更多地清理这些字符串。我们将使用R中的gsub函数删除不需要的标点符号。这一步你可能需要尝试一些组合,这取决于你的数据有多脏。

listofstrvec<-lapply(listofstrvec,FUN = gsub,pattern="[\\,\\.\\-]",replacement= "") 

#> listofstrvec 
# [[1]] 
# [1] "mgroad" "ambikapur" "ch546453" 

# [[2]] 
# [1] "tt"  "road" "bhopal" "madhya" "pradesh" 
# [6] "462003" 

现在,我们将尝试match与每个向量中的弦的地方的位置。

matched.place<-lapply(X = listofcharvec,FUN = match,table=place) 
#> matched.place 
#[[1]] 
#[1] NA 4 NA 

#[[2]] 
#[1] NA NA 1 NA NA NA 

最后,使用的sapplyis.nalength功能相结合,你可以得到一个向量的位置。

df$place<-sapply(matched.place,function(t){ifelse(test = (length(!is.na(t))>0), 
yes = place[t[!is.na(t)]],no = NA)}) 

#> df 
#   id        address  place 
#1 297308272   mgroad, ambikapur, ch-546453 ambikapur 
#2 297308281 tt road, bhopal, madhya pradesh 462003 bhopal 
+0

非常感谢你..它帮助:) – Subhashree

+0

@Subhashree如果它为你工作,你会接受这个答案或是有什么不适合你。 – TUSHAr

相关问题