合并具有功能的2个数据框,例如笛卡尔积或交叉联接

问题描述 投票:0回答:1

我想将两个大小不同的数据帧与一个二进制函数(即str_count())组合,以使df1的行(包含正则表达式)成为df2的列(包含文本数据)。

“样本产品表结果”

library(dplyr)

# dummy data
df1 <- 
  tribble(
    ~regex_name, ~regex_data
    , "reg1", "(\\w+ )"
    , "reg2", "\\d+"
  )

df2 <- 
  tribble(
    ~metadata, ~text
    , "meta1", "text 1"
    , "meta2", "text2 3 4"
  )

# should result in something like
df1_2 <- 
  tribble(
    ~metadata, ~text,       ~reg1, ~reg2
    , "meta1", "text 1",    1,     2
    , "meta2", "text2 3 4", 0,     3
  )

到目前为止我尝试过的

在网上搜索了一段时间之后,我认为我可以采取一些可能涉及一些问题或可能不必要的中间步骤的方法。

  1. a。使用full_join(加入by=是什么?)b。后跟tidyr::spread(),(或pivot_wider() ??)
  2. 使用purrr::cross2()(或cross_dfr())(但结构错误吗?)后跟(b1.b)
  3. 使用purrr::map2()mutate的某种组合(我无法使其正常工作,并且map2要求数据帧的长度相同)

使用正则表达式只是一个例子(也是我正在使用的东西)。另外,尽管我使用的是tidyverse库,但其他任何可行的优雅(简单?)解决方案都可以(如果中间步骤过多,我很容易出错)。

r dplyr tidyr cartesian-product cross-join
1个回答
0
投票

answer使用tidyr::crossing提及。与tidyr::crossing不同,它保留数据帧。这可能很简单,但是我想知道是否可以一步完成?

purrr::cross2
© www.soinside.com 2019 - 2024. All rights reserved.