我又一次被这个希望很简单的任务困住了。
我有以下数据框:
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/