FUN 参数中的乘法
Multiplication in FUN argument
我有这个数据框
x <- data.frame(
matrix(
c(letters[1:3], c("x", "x", "y") ,
sample(c(rep(1,100),0), size = 1),
sample(c(rep(1,100),0), size = 1),
sample(c(rep(1,100),0), size = 1)), ncol = 3)
)
我想按组 X 和 Y 做乘法。
我的建议
agg <- aggregate(x$X3,
by = list(x$X2),
FUN = *)
我想用 sum
, mean
byt 来乘
+
之于 sum
如同 *
之于 prod
(对于 product)。
您的示例数据遵循 data.frame(matrix())
的反模式。一个矩阵只能有一种数据类型。你在矩阵中混合了字符和数字数据,矩阵使它全部 character
class,你不能对字符进行数学运算。这是正确的示例数据和解决方案的演示。另请注意,使用 by = X["X2"]
而不是 by = list(x$X2)
会在结果中提供更好的列名。
(x <- data.frame(
X1 = letters[1:3],
X2 = c("x", "x", "y") ,
X3 = 2:4
))
# X1 X2 X3
# 1 a x 2
# 2 b x 3
# 3 c y 4
aggregate(x$X3, by = x["X2"], FUN = prod)
# X2 x
# 1 x 6
# 2 y 4
要么使用 prod,要么使用带 * 的 Reduce。还将 X3 转换为数字,并使用如图所示的单括号来保留名称。交替使用聚合公式方法,仅针对 prod 显示,但也适用于 Reduce。
xx <- transform(x, X3 = as.numeric(X3))
aggregate(xx["X3"], by = xx["X2"], FUN = prod)
aggregate(xx["X3"], by = xx["X2"], FUN = Reduce, f = `*`) # same
aggregate(X3 ~ X2, xx, FUN = prod)
更好的例子可能是使用 R 附带的 mtcars:
aggregate(mtcars["mpg"], by = mtcars["cyl"], FUN = prod)
aggregate(mtcars["mpg"], by = mtcars["cyl"], FUN = Reduce, f = `*`) # same
aggregate(mpg ~ cyl, mtcars, FUN = prod)
我有这个数据框
x <- data.frame(
matrix(
c(letters[1:3], c("x", "x", "y") ,
sample(c(rep(1,100),0), size = 1),
sample(c(rep(1,100),0), size = 1),
sample(c(rep(1,100),0), size = 1)), ncol = 3)
)
我想按组 X 和 Y 做乘法。
我的建议
agg <- aggregate(x$X3,
by = list(x$X2),
FUN = *)
我想用 sum
, mean
byt 来乘
+
之于 sum
如同 *
之于 prod
(对于 product)。
您的示例数据遵循 data.frame(matrix())
的反模式。一个矩阵只能有一种数据类型。你在矩阵中混合了字符和数字数据,矩阵使它全部 character
class,你不能对字符进行数学运算。这是正确的示例数据和解决方案的演示。另请注意,使用 by = X["X2"]
而不是 by = list(x$X2)
会在结果中提供更好的列名。
(x <- data.frame(
X1 = letters[1:3],
X2 = c("x", "x", "y") ,
X3 = 2:4
))
# X1 X2 X3
# 1 a x 2
# 2 b x 3
# 3 c y 4
aggregate(x$X3, by = x["X2"], FUN = prod)
# X2 x
# 1 x 6
# 2 y 4
要么使用 prod,要么使用带 * 的 Reduce。还将 X3 转换为数字,并使用如图所示的单括号来保留名称。交替使用聚合公式方法,仅针对 prod 显示,但也适用于 Reduce。
xx <- transform(x, X3 = as.numeric(X3))
aggregate(xx["X3"], by = xx["X2"], FUN = prod)
aggregate(xx["X3"], by = xx["X2"], FUN = Reduce, f = `*`) # same
aggregate(X3 ~ X2, xx, FUN = prod)
更好的例子可能是使用 R 附带的 mtcars:
aggregate(mtcars["mpg"], by = mtcars["cyl"], FUN = prod)
aggregate(mtcars["mpg"], by = mtcars["cyl"], FUN = Reduce, f = `*`) # same
aggregate(mpg ~ cyl, mtcars, FUN = prod)