【问题标题】:map column of one data frame with another data frame column in R (map a child element which is created from parent)将一个数据框的列与 R 中的另一个数据框列映射(映射从父元素创建的子元素)
【发布时间】:2020-11-19 15:54:21
【问题描述】:

我有两个数据框,基于一个数据框列,我在另一个数据框中创建了列值。我必须将一个数据框中的新创建值映射到创建新值的父数据框列值。下面给出示例

df1: parent data frame

id      sname       SID
23     S_FRGD_56    22
45     S_TYR_23     22
12     S_IUFY_82    15

从“名称”列中,我创建了新名称并为该新名称提供了 ID,如下所示

df2: 
newid      new_sname    SID
675     NewS_TYR_23      22
56      NewS_IUFY_82     15
124     NewS_FRGD_56     22

在两个数据框之上,我从 df1 中的 'S_FRGD_56' sname 在 df2 中创建了 'NewS_FRGD_56' new_sname。所以我有地图'NewS_FRGD_56'属于'S_FRGD_56'。

Expected output:
id    sname         newid     new_sname     SID
23     S_FRGD_56    124     NewS_FRGD_56    22
45     S_TYR_23     675     NewS_TYR_23     22
12     S_IUFY_82    56      NewS_IUFY_82    15

如果我们在 SID 上加入,则一个 sname 将被错误地映射到另一个,因为两个 sname 可以具有相同的 SID。

【问题讨论】:

    标签: r


    【解决方案1】:

    一种方法是使用fuzzyjoin 包。这将使用来自stringrstr_detectnew_sname 中检测sname 的子字符串。

    library(stringr)
    library(fuzzyjoin)
    
    fuzzy_inner_join(
      df2, 
      df1,
      by = c("new_sname" = "sname"),
      match_fun = str_detect
    )
    

    输出

      newid    new_sname SID.x id     sname SID.y
    1   675  NewS_TYR_23    22 45  S_TYR_23    22
    2    56 NewS_IUFY_82    15 12 S_IUFY_82    15
    3   124 NewS_FRGD_56    22 23 S_FRGD_56    22
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2021-04-30
      • 2020-08-29
      相关资源
      最近更新 更多