【问题标题】:R: multiply all columns in a dataframeR:将数据框中的所有列相乘
【发布时间】:2016-10-30 03:58:14
【问题描述】:

我的数据框包含所有数字列(例如 mtcars)。如何创建一个显示所有列的乘积的新列?我的尝试:

 library(tidyverse)
 mtcars %>% mutate(product=prod(mpg:carb))

产生不正确的产品

    mpg  cyl  disp  hp  drat    wt   qsec  vs am  gear  carb      product
1  21.0   6 160.0  110  3.90  2.620  16.46  0  1    4    4      8.515157e+18
2  21.0   6 160.0  110  3.90  2.875  17.02  0  1    4    4      8.515157e+18
...

【问题讨论】:

  • 老实说,我可能会做mtcars %>% mutate(prod = apply(., 1, prod))
  • 没有 @akrun 的 Reduce 解决方案那么快,但可以工作
  • 老实说,对于 data.frame 来说,这是一种奇怪的操作。很有可能您应该重新整形为长格式或只使用矩阵。
  • 整形为 long 或转换为矩阵是否会比仅使用 Reduce 更快?
  • 值得怀疑,但如果您使用*prod 作为函数,除非数据确实很大,否则任何选项都不会足够慢。它将做的是让所有代码都变得不那么复杂。

标签: r dplyr tidyr tidyverse


【解决方案1】:

我们可以使用Reduce

mtcars %>%
     mutate(Prod = Reduce(`*`, .))

或使用do

mtcars %>% 
    rowwise() %>%
    do(data.frame(., Prod = prod(unlist(.))))

【讨论】:

  • @OttToomet OP的问题是R: multiply all columns in a dataframe
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多