gpt4 book ai didi

r - 在 R 中匹配文本字符串时处理错误拼写

转载 作者:行者123 更新时间:2023-12-04 02:40:50 24 4
gpt4 key购买 nike

我正在收集调查数据(使用开放数据包),我的现场团队祝福他们的心,有时会在人名的拼写上有点创意。所以我有一个“正确”的受访者姓名,以及一些与“家庭成员姓名”变量相关联的记录的年龄变量。有许多不同年龄的家庭成员。我想要受访者年龄。

这是一些说明我的问题的虚假数据:

#the respondent
r = data.frame(name = c("Barack Obama", "George Bush", "Hillary Clinton"))
#a male member
m = data.frame(name = c("Barack Obama","George", "Wulliam Clenton"), age = c(55,59,70)); m$name=as.character(m$name)
#a female member
f = data.frame(name = c("Michelle O","Laura Busch", "Hillary Rodham Clinton"), age = c(54,58,69)); f$name=as.character(f$name)
#if the responsent is the the given member, record their age. if not, NA
a = cbind(
ifelse(r$name==m$name,m$age,NA)
,ifelse(r$name==f$name,f$age,NA)
)
#make a function for plyr that gives me the age of the matched respondent
f = function(row){
d = row[is.na(row)==0]
ifelse(length(d)==0,NA,d)
}
require(plyr)
b = aaply(a,.margins=1,.fun=f)
data.frame(names=r$name,age=b)
names age
1 Barack Obama 55
2 George Bush NA
3 Hillary Clinton NA

what.I.would.like = data.frame(names=c("Barack Obama", "George Bush", "Hillary Clinton"),age = c(55,59,70))
1> what.I.would.like
names age
1 Barack Obama 55
2 George Bush 59
3 Hillary Clinton 70

在我的真实数据中,我有数百人和多达 13 个家庭成员。从那以后,我将调查更改为单独记录受访者年龄,但我有一堆数据需要清理。

最佳答案

拼写问题通常通过使用 soundex 的一些变体来解决。算法。 RecordLinkage 中有一个 R 实现包裹。然后你需要比较的不是字符串本身,而是它们的“语音代码”:

> soundex('Clenton') == soundex('Clinton')
[1] TRUE

更新:
还有另一种方法可以确定两个单词是否彼此“接近” - 这是单词之间的某种意义上的“距离”。距离的一个标准度量是将第一个单词转换为第二个单词所需的最少一个字母替换、删除和插入的数量。它被称为 Levenshtein distance . RecordLinkage 以及 vwr包具有相应的功能:
> levenshteinDist('Clinton', 'Clenton')
[1] 1

> vwr::levenshtein.distance('Clinton', 'Clenton')
Clenton
1

然后,如果距离不超过某个阈值,您可以使用距离并考虑“接近”这个词。

更新: soundex也可在 phonics包裹。

关于r - 在 R 中匹配文本字符串时处理错误拼写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16837461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com