【问题标题】:Partial matching of two columns of data [duplicate]两列数据的部分匹配[重复]
【发布时间】:2018-09-13 22:31:20
【问题描述】:

我的问题是我有一列数据(字符和数字组合),我想检查每个字段是否与不同 df 的列中的一个字段部分匹配,如果它确实写入将第二个 df 中的对应值放入第一个变量的新列中。

所以更实际:

df1 (2x60k)=

QST_ID    QST_CODING
1         M79.68
2         A01.1
3         K07
4         Z09

df2 (2x2451)=

icd    name
A01    intestinal diseases
...
K07    Diseases of oral cavity

目标是让 df1 =

QST_ID    QST_CODING    QST_CODING_RC_NAME
1         M79.68        diseaseX
2         A01.1         Intestinal diseases
3         K07           Diseases of oral cavity
4         Z09           diseaseY

最简单的解决方法是忽略 .并且基本上将“icd”视为 icd* 但我没有让这个适用于整个列表。

我尝试使用 match、pmatch 和 grep 函数执行此操作,并尝试使用 ^(正则表达式通配符)作为所有 icd 的前缀,但它根本不起作用:

df1$QST_CODING_RC_name <- df2$name[pmatch(as.character(df1$QST_CODING), df2$icd, duplicates.ok = T)]

df1$QST_CODING_RC_name <- df2$name[grep(df2$icd, as.character(df1$QST_CODING), ignore.case = T)]

如果有人对此有解决方案,我将非常高兴。非常感谢您的帮助。

编辑: QST_CODING 包含不同形式的值(g.523 等),其中该点之后的信息需要稍后使用,不能简单地删除。此外,在 QST_CODING 中,点前部分和点后部分的长度不同。

【问题讨论】:

  • 首先使用gsub("\\..*", "", df1$QST_CODING)或类似的方式将.之后的所有内容全部删除,然后使用merge(df1, df2, by.x="QST_CODING", by.y="icd", all.x=TRUE)
  • 更正:by.x="QST_abbreviated",即gsub 命令创建的列。
  • 这是要求部分匹配。可能是重复的,但可能不是指定的 Q。搜索:“合并部分匹配 [r]”。如果问题是“如何将一列的前三个字符与另一列匹配,那么精确匹配的答案可能是有意义的。
  • 非常感谢您的帮助。不幸的是,这不起作用,因为 QST_CODING 还包含 g.235、K-325.65 等值。而且因为这些是不同的代码,我需要它们保持原样并稍后重新编码。对于仅匹配前 x 个字符的解决方案:QST_CODING 具有不同的长度(在点 a- 之前以及总共)。
  • 这个问题有一个与 ICD 代码相关的特定答案,所以可能不是重复的。使用 icd CRAN 包(我是作者),有经过试验和测试的算法可以做到这一点。我认为你正在做的是分配合并症。 icd 可以使用标准化的疾病组来做到这一点,或者您可以使用自己的。这一切都有据可查。 jackwasey.github.io/icd

标签: r regex pattern-matching match matching


【解决方案1】:

您可以尝试使用带有stringdist_joins 的fuzzyjoin 包。我使用了method = "soundex",但method = "qgram" 在此示例中给出了相同的结果。在您的完整数据集上,如果 icd 代码始终是 QST_CODING 字段的一部分,则使用 qgram 可能会获得更好的结果,但这是您必须调查的内容。

library(fuzzyjoin)

stringdist_left_join(df, df, by = c("QST_CODING" = "icd"), method = "soundex")

  QST_ID QST_CODING  icd                    name
1      1     M79.68 <NA>                    <NA>
2      2      A01.1  A01     intestinal diseases
3      3        K07  K07 Diseases of oral cavity
4      4        Z09 <NA>                    <NA>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2021-01-16
    • 2013-08-22
    • 2016-11-28
    相关资源
    最近更新 更多