r - 如何将多个 df 列相乘

标签 r purrr

我有一个包含许多列的 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/

相关文章:

r - 在 R/Shiny 中,htmlOutput()/renderUI() 的最佳替代方案?

r - 使用 purrr::map 函数的正确组合从多级列表创建 df

r - 为每对二进制变量创建一个单元格计数最低的矩阵

r - 关于使用 rvest 和 purrr 抓取带有嵌套链接的多个页面的问题

r - 在 R 中的状态 map 上绘制条形图

r - 编译 Rpackage : error in asNamespace(ns) using Rcpp 的问题

R:从小标题中的 data.frames 列表中提取列

r - 基于正则表达式模式匹配将 PDF 索引为数据帧列表

r - 将字符拆分为字母和数字

r - 使用 ROracle 在 R 中执行存储的 Oracle 过程