【问题标题】:Merge two data frames in R by variable that is regular expression in one and string in other通过变量合并 R 中的两个数据帧,其中一个是正则表达式,另一个是字符串
【发布时间】:2022-06-11 21:23:31
【问题描述】:

我有两个要合并的数据框

a<- data.frame(x=c(1,4,6,8,1,6,7,2),ID=c("132","14.","732","2..","132","14.","732","2.."),year=c(1,1,1,1,2,2,2,2))

b<- data.frame(y=c(2,7,5,5,1,1,2,3),ID=c("132","144","732","290","132","144","732","290"),year=c(1,1,1,1,2,2,2,2))

我想用来合并两个数据框的 ID 变量在数据集 a 中并不完全已知。我也想按年合并。它们被称为完全识别的正则表达式。请注意, 是一对一的匹配。在此示例中,您将不会在数据集中找到 ID“1..”,因此不存在模棱两可的匹配项。

我想得到这样的东西:

output<-data.frame(y=c(2,7,5,5,1,1,2,3),x=c(1,4,6,8,1,6,7,2),ID=c("132","144","732","290","132","144","732","290"), year=c(1,1,1,1,2,2,2,2))

我尝试使用 substr 删除正则表达式部分,然后在合并中使用starts_with,但它不起作用。

我收到以下错误消息

Coercing pattern to a plain character vector

当我这样做时:

df_complete <- regex_inner_join(b,a, by=c("ID","year"))

谢谢堆栈溢出...

【问题讨论】:

    标签: r fuzzyjoin


    【解决方案1】:

    @jblood94 的评论回答

    使用ab 作为data.tables:a[, regex_inner_join(b[year == .BY], .SD, by = "ID"), year] – jblood94

    【讨论】:

      【解决方案2】:

      您可能想使用fuzzyjoin 包,然后您可以直接使用regex_inner_join()

      fuzzyjoin::regex_inner_join(b,a, by="ID") %>% select(x,y,ID=ID.x)
      

      输出:

        x y  ID
      1 1 2 132
      2 4 7 144
      3 6 5 732
      4 8 5 290
      

      【讨论】:

      • 亲爱的浪塘。可悲的是,我把问题简化得太多了。我合并了第二个变量(年份)并且不允许合并:当我这样做时将pattern强制转换为纯字符向量:df_complete
      • @mclofa 与ab 作为data.tables:a[, regex_inner_join(b[year == .BY], .SD, by = "ID"), year]
      • 很好,@jblood94!!
      猜你喜欢
      • 2019-07-05
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 2019-09-20
      • 2012-02-17
      • 1970-01-01
      相关资源
      最近更新 更多