我有一个单词对列表:

library(tidyverse)

word_pairs <- structure(list(V1 = c("cup", "cup", "cup"), V2 = c("kilo", "slice","bacon")), row.names = c(NA, -3L), class = "data.frame")

我有以下数据:

data <- structure(list(keyword_pair = c("cup-bacon", "cup-kilo", "cup-slice"
), kwe_1 = c("cup", "cup", "cup"), kwe_2 = c("bacon", "kilo", "slice"), cup = c(2L, 2L, 2L), kilo = c(7L, 7L, 7L), lot = c(3L,3L, 3L), pound = c(5L, 5L, 5L), slice = c(7L, 7L, 7L), bacon = c(4L,4L, 4L), bowl = c(3L, 3L, 3L), box = c(2L, 2L, 2L), fruit = c(2L, 2L, 2L), plate = c(4L, 4L, 4L), bag = c(2L, 2L, 2L), bunch = c(3L, 3L, 3L), chop = c(3L, 3L, 3L), ground = c(2L, 2L, 2L), lettuc = c(2L,2L, 2L), lean = c(2L, 2L, 2L), appl = c(4L, 4L, 4L), barbel = c(2L,2L, 2L), potato = c(2L, 2L, 2L), shoulder = c(2L, 2L, 2L), carrot = c(2L,2L, 2L), mango = c(2L, 2L, 2L), chicken = c(4L, 4L, 4L), press = c(3L,3L, 3L), strawberri = c(3L, 3L, 3L), pint = c(3L, 3L, 3L), sausag = c(2L,2L, 2L), orang = c(2L, 2L, 2L), up = c(2L, 2L, 2L), breast = c(2L,2L, 2L), head = c(2L, 2L, 2L), frozen = c(2L, 2L, 2L), peach = c(2L,2L, 2L), berri = c(2L, 2L, 2L), cherri = c(2L, 2L, 2L), flower = c(2L, 2L, 2L), tomato = c(2L, 2L, 2L), egg = c(2L, 2L, 2L)), row.names = c(NA, -3L), class = "data.frame")

我想从匹配词对的数据中提取每行(频率)的数值.

以下功能将执行此操作:

my_function <- function(x) {
 data %>%
  filter(kwe_1  == word_pairs[x,1] & kwe_2 == word_pairs[x,2]) %>%
  select(keyword_pair:kwe_2,
         starts_with(word_pairs[x,1]),
         starts_with(word_pairs[x,2])) %>%
  rename(freq_kwe_1 = 4,
         freq_kwe_2 = 5)
}

如果我把这个函数插入到map_dfr()中,它会生成我想要的,但是如果数据集很长,运行时间就很长.

我希望有人能回答两个问题:

  1. 我怎样才能加快速度?
  2. 我需要学习什么样的原则,这样我才能自己解决这个问题?
1:nrow(word_pairs) %>%
 map_dfr(
  my_function)
#>   keyword_pair kwe_1 kwe_2 freq_kwe_1 freq_kwe_2
#> 1     cup-kilo   cup  kilo          2          7
#> 2    cup-slice   cup slice          2          7
#> 3    cup-bacon   cup bacon          2          4

reprex package(v2.0.1)于2022年4月29日创建

推荐答案

也许我遗漏了什么,但你可能根本不需要使用purrr:

data %>%
    rowwise() %>%
    transmute(keyword_pair,
              kwe_1,
              kwe_2,
              across(c(kwe_1, kwe_2), ~ get(.), .names = "freq_{.col}"))

  keyword_pair kwe_1 kwe_2 freq_kwe_1 freq_kwe_2
  <chr>        <chr> <chr>      <int>      <int>
1 cup-bacon    cup   bacon          2          4
2 cup-kilo     cup   kilo           2          7
3 cup-slice    cup   slice          2          7

R相关问答推荐

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

使用lapply的重新定位功能

提取R中值和列名的所有可能组合

使用gggrassure减少地块之间的空间

在R中,如何在每个堆叠的条上放置误差条,特别是当使用facet_grid时?

使用tidy—select创建一个新的带有mutate的摘要变量

如何在区分不同条件的同时可视化跨时间的连续变量?

在R中为马赛克图中的每个字段着色

在组中添加值增加和减少的行

R中插入符号训练函数的中心因子和尺度因子预测

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

如何读取CSV的特定列时,给定标题作为向量

Select 季度月值

DEN扩展包中的RECT树形图出现异常行为

将二进制数据库转换为频率表

列名具有特殊字符时的循环回归

根据约束随机填充向量的元素

如何将一列中的值拆分到R中各自的列中

如何对r中包含特定(未知)文本的行求和?

如何在刻面和翻转堆叠条形图中对齐geom_text()