讓我們通過第一轉換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
最後,使用的sapply
,is.na
和length
功能相結合,你可以得到一個向量的位置。
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
請澄清一下您的問題。發佈'df'和'AD'的預期輸出將會很有幫助。 – www