【发布时间】: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作为函数,除非数据确实很大,否则任何选项都不会足够慢。它将做的是让所有代码都变得不那么复杂。