r - 如何从另一个数据框中的文本列表中的 r 中的列返回特定单词

标签 r dataframe text filter

我有一个包含两个变量的数据框。假设我的数据框是 df,那么这两个变量是 df$id 和 df$address。 df$address 包含完整地址,如 TT Road, Bhopal, Madhya Pradesh 462003。我有另一个数据框包含 10 个地方,其中 10 个是 bhopal。所以我只想在新专栏中返回博帕尔。这是一个示例,我有超过 200000 个 ID 和 300 个地名。 下面是例子

数据框 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"))

最佳答案

让我们首先将 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 中的 strsplit

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

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

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

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

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

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

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

现在我们将尝试将 places 中的位置与向量中的每个字符串进行匹配

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

关于r - 如何从另一个数据框中的文本列表中的 r 中的列返回特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44697812/

相关文章:

python - Pandas:在列的应用函数中使用索引值

R - 将矩阵存储到单个数据帧单元格中

javascript - 可点击 "show-hide"文本或剧透的最小(最短)HTML

sql - 优雅地将一组字符串(.txt 文件) append 到另一组字符串(.txt 文件)?

c# - 如何将 C# GUI 标签文本分成单独的行(不在运行时)?

r - ggplot2 中的透明 mask

bash - 将 bash 脚本合并到 R 包中?

r - 在 r 中传递 figPath 参数时,Webshot() 无法与 wordcloud2() 一起使用。

滚动 PCA 并绘制主成分的比例方差

python - 合并字符串列上的两个数据框 - 复合字符串列