使用您生成的数据,无需使用 dplyr 进行summarise()。每条记录都是独一无二的。所以这似乎更像是一个使用apply()的地方。
有很多方法可以遍历这个;我刚刚创建了十二个语句。我们将 df 的 mu,lamda 列传递给 apply 函数,然后在每 36000 行中使用您的函数将该向量的 12 个片段抓取到 12 个新变量 y1:y12 中。
df$y1 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[1])
df$y2 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[2])
df$y3 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[3])
df$y4 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[4])
df$y5 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[5])
df$y6 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[6])
df$y7 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[7])
df$y8 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[8])
df$y9 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[9])
df$y10 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[10])
df$y11 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[11])
df$y12 <- apply(df[,3:4], 1, function(x) round(gompertz(1:12,100,x[1],x[2]), digits = 2)[12])
head(df)
location year mu lambda y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12
1 1 1980 38.70790 4.531560 0 0 0 0.86 19.00 56.00 81.67 93.18 97.56 99.14 99.70 99.89
2 1 1981 42.64717 4.765444 0 0 0 0.14 12.60 52.22 81.56 93.81 98.01 99.37 99.80 99.94
3 1 1982 39.19041 4.527792 0 0 0 0.85 19.33 56.75 82.27 93.49 97.71 99.20 99.73 99.91
4 1 1983 37.50859 4.565435 0 0 0 0.79 17.46 53.28 79.68 92.13 97.09 98.94 99.62 99.86
5 1 1984 36.71666 4.779357 0 0 0 0.27 11.29 44.76 74.36 89.65 96.05 98.53 99.45 99.80
6 1 1985 42.11325 4.783322 0 0 0 0.13 11.99 50.91 80.66 93.39 97.85 99.31 99.78 99.93
注意:在dplyr 中,您还可以执行以下操作:
df <- df %>% rowwise() %>% mutate(y1 = round(gompertz(1:12,100,mu,lambda), digits = 2)[1],
y2 = round(gompertz(1:12,100,mu,lambda), digits = 2)[2],
y3 = round(gompertz(1:12,100,mu,lambda), digits = 2)[3],
y4 = round(gompertz(1:12,100,mu,lambda), digits = 2)[4],
y5 = round(gompertz(1:12,100,mu,lambda), digits = 2)[5])
重复6-12,得到同样的结果。