【发布时间】:2019-10-12 22:20:16
【问题描述】:
我想将两个不同大小的数据框与一个二进制函数(即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
)
到目前为止我已经尝试过什么
在网上搜索了一下之后,我认为我可以采取一些可能的方法,这些方法涉及一些问题,或者可能是一些不必要的中间步骤。
- 一个。使用
full_join(加入by=什么?) 湾。后跟tidyr::spread(),(或pivot_wider()??) - 使用
purrr::cross2()(或cross_dfr())(但它给出了错误的结构?)后跟(b1.b) - 使用
purrr::map2()和mutate的某种组合(我无法使其正常工作,map2要求数据帧的长度相同)
正则表达式的使用只是一个例子(也是我正在使用的)。
此外,虽然我使用的是tidyverse 库,但任何其他优雅(简单?)的解决方案都可以正常工作(如果中间步骤太多,我很容易出错)。
【问题讨论】:
-
样本数据没有给出
str_detect的正确结果。但这是一个样本,所以我想没关系?
标签: r dplyr tidyr cartesian-product cross-join