我有一个包含许多列的 df。
我想使用固定常数将每一列相乘。
我正在寻找使用 purrr
实现此目的的最佳策略(我仍在尝试了解 lamp
等)
library(tidyverse)
library(lubridate)
df1 <- data.frame(
date = ymd(c("2019-02-01", "2019-02-02", "2019-02-03", "2019-02-04",
"2019-02-05")),
x = c(1, 2, 3, 4, 5),
y = c(2, 3, 4, 5, 6),
z = c(3, 4, 5, 6, 7)
)
每列相乘的常数如下:
c(10, 20, 30)
这是我期望的输出:
data.frame(
date = ymd(c("2019-02-01", "2019-02-02", "2019-02-03", "2019-02-04",
"2019-02-05")),
x = c(10, 20, 30, 40, 50),
y = c(40, 60, 80, 100, 120),
z = c(90, 120, 150, 180, 210)
)
最佳答案
我们可以使用 purrr
(tidyverse
的一部分)中的 map2
来实现这一点。
df1[2:4] <- map2(df1[2:4], c(10, 20, 30), ~.x * .y)
df1
# date x y z
# 1 2019-02-01 10 40 90
# 2 2019-02-02 20 60 120
# 3 2019-02-03 30 80 150
# 4 2019-02-04 40 100 180
# 5 2019-02-05 50 120 210
基本 R 等效项是 mapply
。
df1[2:4] <- mapply(FUN = function(x, y) x * y, df1[2:4], c(10, 20, 30), SIMPLIFY = FALSE)
关于r - 如何将多个 df 列相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896993/