2017-06-22 41 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

相關問題