【问题标题】:Row-wise multiplication of selected columns with dplyr使用 dplyr 对选定列进行逐行乘法
【发布时间】:2020-10-21 12:56:10
【问题描述】:

对从 daraframe 中选择的所有列执行逐行乘法的方法是什么。 下面的 Mult 列是通过说明要相乘的变量来显式创建的。

如果我选择了不同的列怎么办?哪些代码需要在 mutate 中才能将之前选择的所有列相乘?注意:所选列的数量并不总是三。

示例:

library(tidyverse)

mtcars %>% 
  select(hp, qsec, disp) %>% 
  mutate(mult = hp * qsec * disp)

【问题讨论】:

    标签: r dataframe dplyr tidyverse


    【解决方案1】:

    一种可能的方法是使用包matrixStats中的rowProds

    mtcars %>% 
      select(hp, qsec, disp) %>% 
      mutate(mult=rowProds(as.matrix(.)))
    

    但我确信有一种更优雅的方式,无需使用其他包。

    【讨论】:

    • 您好,非常感谢。即使我知道matrixStats 包我有点忘记尝试它:D。你的解决方案很优雅:)
    【解决方案2】:

    你可以使用Reduce -

    library(dplyr)
    
    mtcars %>% 
      select(hp, qsec, disp) %>% 
      mutate(mult = Reduce(`*`, .))
    

    或者rowwiseprod -

    mtcars %>% 
      select(hp, qsec, disp) %>% 
      rowwise() %>%
      mutate(mult = prod(c_across()))
    

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 2013-05-29
      • 2020-08-16
      • 1970-01-01
      • 2020-08-05
      • 2019-03-05
      相关资源
      最近更新 更多