我想将两个大小不同的数据帧与一个二进制函数(即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=
是什么?)b。后跟tidyr::spread()
,(或pivot_wider()
??)purrr::cross2()
(或cross_dfr()
)(但结构错误吗?)后跟(b1.b)purrr::map2()
和mutate
的某种组合(我无法使其正常工作,并且map2
要求数据帧的长度相同)使用正则表达式只是一个例子(也是我正在使用的东西)。另外,尽管我使用的是tidyverse
库,但其他任何可行的优雅(简单?)解决方案都可以(如果中间步骤过多,我很容易出错)。
此answer使用tidyr::crossing
提及。与tidyr::crossing
不同,它保留数据帧。这可能很简单,但是我想知道是否可以一步完成?
purrr::cross2