让我们通过第一转换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