假设公司名称的字符向量以各种形式出现。这是一个10,000行数据框的小版本;它显示了所需的第二个向量(“two.names”)。
structure(list(firm = structure(1:8, .Label = c("Carlson Caspers",
"Carlson Caspers Lindquist & Schuman P.A", "Carlson Caspers Vandenburgh Lindquist & Schuman P.A.",
"Carlson Caspers Vandenburgh & Lindquist", "Carmody Torrance",
"Carmody Torrance et al", "Carmody Torrance Sandak", "Carmody Torrance Sandak & Hennessey LLP"
), class = "factor"), two.name = structure(c(1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L), .Label = c("Carlson Caspers", "Carmody Torrance"
), class = "factor")), .Names = c("firm", "two.name"), row.names = c(NA,
-8L), class = "data.frame")
firm two.name
1 Carlson Caspers Carlson Caspers
2 Carlson Caspers Lindquist & Schuman P.A Carlson Caspers
3 Carlson Caspers Vandenburgh Lindquist & Schuman P.A. Carlson Caspers
4 Carlson Caspers Vandenburgh & Lindquist Carlson Caspers
5 Carmody Torrance Carmody Torrance
6 Carmody Torrance et al Carmody Torrance
7 Carmody Torrance Sandak Carmody Torrance
8 Carmody Torrance Sandak & Hennessey LLP Carmody Torrance
假设向量已按公司名称的字母顺序排序(我相信将最短的版本放在首位)。我如何使用agrep()
从第一个公司名称开始,将其与第二个公司名称相匹配,然后 - 假设紧密匹配 - 将第一个公司名称添加到新列 (short.name) 中。然后,将其与第三个元素匹配,等等。所有 Carlson 变体都将匹配。
如果没有足够的匹配,比如当 R 遇到第一个 Carmody 时,从它开始并匹配到下一个元素,依此类推,直到下一个不匹配。
如果连续的公司之间没有匹配,R 应该继续直到找到匹配。
这个问题的答案是对整个向量和按年份分组的模糊匹配。 通过名称的模糊匹配(通过使用 R 的 agrep)创建唯一 ID 然而,似乎提供了可以解决我的问题的部分代码。本题使用stringdist()
. 字符串列表
编辑:
下面,该对象matches
是一个显示匹配项的列表,但我不知道告诉 R 的代码“获取第一个并将以下匹配项(如果有)转换为该名称并将该名称放入新变量列中。 "
as.factor(df$firm)
matches <- lapply(levels(df$firm), agrep, x=levels(df$firm), fixed=TRUE, value=FALSE)