【发布时间】:2020-03-30 20:41:21
【问题描述】:
我希望函数依赖于数据框中每个产品的 sd 值。所以不要在函数中输入常量sd值,因为每个产品都有不同的sd。
df <- data.frame(Product = c("A", "B"),
Oct = c(33, 23),
Nov = c(23, 26),
SD = c(1, 5))
rand_vect_cont <- function(N, M, sd) {
vec <- rnorm(N, M/N, sd)
vec / sum(vec) * M
}
sapply(unlist(df[2:3]), rand_vect_cont, N = 4, df$SD)
我想创建一个新表,其列将是数据框中各个元素的总和。这是带有常量 sd 的示例:
> sapply(unlist(df[2:3]), rand_vect_cont, N = 4, sd = 1)
Oct1 Oct2 Nov1 Nov2
[1,] 7.492679 5.285553 4.716102 6.177153
[2,] 8.499570 6.008897 6.339937 6.638079
[3,] 9.301981 6.617405 5.262105 6.235205
[4,] 7.705770 5.088145 6.681856 6.949563
【问题讨论】:
-
当您
unlist时,您将其视为单个向量。 -
我的问题是,您不想为每个产品单独执行此操作吗
split(df[-1], df$Product) -
是的,可以这样分开
-
你需要
sapply(unlist(df[2:3]), Vectorize(rand_vect_cont), N = 4, sd = df$SD) -
行太多,应该是4行,和我的例子一样
标签: r function dataframe sapply standard-deviation