gpt4 book ai didi

r - 在现有数据框中添加向量作为新列

转载 作者:行者123 更新时间:2023-12-01 21:43:33 26 4
gpt4 key购买 nike

示例数据

df <- data.frame(location = rep(1:1000, each = 36), 
year = rep(1980:2015,times = 1000),
mu = runif(min = 36.5, max = 43.2, 1000*36),
lambda = runif(min = 4.5, max = 4.8, 1000*36))

该数据由 1000 个地点和 36 年组成,有两个变量mu 和 lambda

对于每个位置 X 年组合,我有一个函数,需要lambda 和 mu 的值并生成大小为 12 的向量。示例:

library(grofit)    
dat <- df[df$location == 1 & df$year == 1980,]
y <- round(gompertz(1:12,100,dat$mu,dat$lambda), digits = 2)
y

[1] 0.00 0.00 0.00 0.72 18.60 56.37 82.26 93.56 97.76 99.23
[11] 99.74 99.91

如果我想将 y 作为列添加到 dat

  new.col <- 5:16 
dat[new.col] <- y
dat

location year mu lambda V5 V6 V7 V8 V9 V10 V11
1 1980 39.60263 4.554095 0 0 0 0.72 18.6 56.37 82.26
V12 V13 V14 V15 V16
1 93.56 97.76 99.23 99.74 99.91

如您所见,我已将 y 作为 dat 中的 V5 至 V16 列附加。我想对 df 中的所有位置和年份组合重复此操作。我希望这一点很清楚。

df %>% group_by(location year) %>% mutate(?? how to I add new columns for y??)

最佳答案

您可以使用lapply():

library(grofit)    
df2 <- do.call(rbind, lapply(1:nrow(df),
function(x) round(gompertz(1:12, 100, df[x, 3], df[x, 4]),
digits = 2)))
df3 <- cbind(df, df2)

结果:

> head(df3)
location year mu lambda 1 2 3 4 5 6 7 8 9 10 11 12
1 1 1980 43.04565 4.536717 0 0 0 0.61 20.58 61.23 85.88 95.39 98.54 99.55 99.86 99.96
2 1 1981 39.00524 4.505235 0 0 0 0.96 20.02 57.28 82.45 93.53 97.71 99.20 99.72 99.90
3 1 1982 41.60206 4.619627 0 0 0 0.42 17.07 56.52 83.18 94.23 98.10 99.38 99.80 99.94
4 1 1983 42.01069 4.689058 0 0 0 0.26 14.87 54.43 82.35 93.99 98.04 99.37 99.80 99.94
5 1 1984 40.34275 4.692595 0 0 0 0.30 14.36 52.30 80.54 93.03 97.61 99.20 99.73 99.91
6 1 1985 41.13246 4.641404 0 0 0 0.38 16.20 55.15 82.32 93.84 97.94 99.32 99.78 99.93

数据:

set.seed(47)  # for sake of reproducibility
df <- data.frame(location = rep(1:1000, each = 36),
year = rep(1980:2015, times = 1000),
mu = runif(min = 36.5, max = 43.2, 1000 * 36),
lambda = runif(min = 4.5, max = 4.8, 1000 * 36))

关于r - 在现有数据框中添加向量作为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49479791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com