r - 使用 purrr::map2 (?) 向数据框添加新列

标签 r tidyverse purrr

我又一次被这个希望很简单的任务困住了。

我有以下数据框:

df <- data.frame(x1 = 1:3,
                 x2 = 2:4,
                 x3 = 3:5,
                 y1 = 1:3,
                 y2 = 2:4,
                 y3 = 3:5)

我现在只想“循环”遍历每个下标并将 x* 与 y* 列相乘,即 x1 * y1、x2 * y2 等等,并将这些结果添加到我的数据中。

对于这类任务,我一直认为这应该可以通过 map 方法轻松完成,但我没有让它工作,例如

library(tidyverse)
df |>
  map2(.x = _,
       .y = 1:3,
       .f = ~.x |>
         mutate(!!sym(paste0(results, .y)) := !!sym(paste0(x, .y)) * !!sym(paste0(y, .y))))

不起作用。

我还考虑过使用 across 的东西,但这也行不通,因为我无法告诉 across 对 x 和 y 输入进行“矢量化”。

有什么想法吗?

最佳答案

使用 reduce 而不是 map2 你可以这样做:

library(dplyr)
library(purrr)

df |>
  reduce(1:3,
    .f = ~ .x |>
      mutate(!!sym(paste0("results", .y)) := !!sym(paste0("x", .y)) * !!sym(paste0("y", .y))),
    .init = _
  )
#>   x1 x2 x3 y1 y2 y3 results1 results2 results3
#> 1  1  2  3  1  2  3        1        4        9
#> 2  2  3  4  2  3  4        4        9       16
#> 3  3  4  5  3  4  5        9       16       25

关于r - 使用 purrr::map2 (?) 向数据框添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74314243/

相关文章:

R:在向量列表中查找唯一向量

r - 如何从 Markdown 文件 (*.md) 中提取 R 代码?

r - 使dcast中的drop参数仅查看公式的RHS

r - 如何修复零膨胀泊松回归的错误

r - 如何将一张工作表中包含多个表格的 Excel 文件分解为单独的数据框?

r - 从 R 中的数据帧列中提取唯一的字符串元素

r - 在具有不同参数的数据框中每行应用/映射不同的函数

r - 如何使用 purrr 的 map 函数执行 row-wise prop.tests 并将结果添加到数据帧?

r - tidyverse 解决方案,用于将多个列重新编码为新列,其中列名后缀增加一

r - 将函数列表作为列的数据框