我在这里寻找解决方案:Multiply columns in a data frame by a vector,这里:What is the right way to multiply data frame by vector?,但它并没有真正起作用.
我想做的是一种或多或少干净的tidyverse方法,将列乘以向量,然后将这些列作为新列添加到现有数据帧中.以第一个链接中的数据为例:
c1 <- c(1,2,3)
c2 <- c(4,5,6)
c3 <- c(7,8,9)
d1 <- data.frame(c1,c2,c3)
c1 c2 c3
1 1 4 7
2 2 5 8
3 3 6 9
v1 <- c(1,2,3)
我期望的结果是:
c1 c2 c3 pro_c1 pro_c2 pro_c3
1 1 4 7 1 8 21
2 2 5 8 2 10 24
3 3 6 9 3 12 27
我试过:
library(tidyverse)
d1 |>
mutate(pro = sweep(across(everything()), 2, v1, "*"))
但这里的问题是,新列实际上是我的数据框中的一个数据框.我正在努力将数据框中的数据框转换为规则列.我想,我可能会先在这个内部数据框中使用setname,然后再使用unnest,但我想知道是否有更直接的方法,在每个列上循环使用across
,并向其提供v1
的第一/第二/第三个元素?
(我知道我可能也可以先用三个新的相乘列创建一个独立的数据框,给它们一个唯一的名称,然后在产品的d1和df上都创建bind_cols
.)