我有一个df,每种A,B和C的生长率大约为60天。df1就是一个例子。
df1 <- data.frame(Day = c('59','60' ), A= c('.1', '.6'), B= c('.2', '.5'), C=c('.3','.4'))df1=Growthrates
我正在根据给定的初始细胞数(1000)计算每天的细胞数。我想要一个df,它使用来自df1的每个物种的初始细胞计数和相应的日增长率,这样df2中每一列(A、B或C)下的计算细胞数都是用前一天的细胞计数和“今天”的速率来计算的。
使用上面的例子,我可以从第58天的第二个df (df2)开始(而不是df1中的59 ),然后计算每个值。
df2 <- data.frame(Day = c('58','59','60' ), A= c('1000', '1100', '1760'), B= c('1000','1200', '18000'), C=c('1000','1300','1820'))df2=calculated单元数(初始输入为1000)。如果计算成功,所提供的其余值将是预期值。
对于任何特定物种,简单的方程式如下:
Day59 count=细胞计数(第58天)*( 1+growth速率(59天))
在初始单元格计数之后,它将需要使用新生成的值作为下一次计算的输入。
细胞计数(第60天)=细胞计数(第59天)*( 1+growth率(第60天))
我很难把它转换成一个for循环。任何帮助都是非常感谢的。
提前谢谢你。
发布于 2022-06-24 00:17:29
library(dplyr)
df2 <- df1 %>% mutate(across(-Day, ~1000*cumprod(as.numeric(.x)+1))) %>%
add_row(Day = '58', A = 1000, B = 1000, C = 1000, .before = 1)
Day A B C
1 58 1000 1000 1000
2 59 1100 1200 1300
3 60 1760 1800 1820编辑:我认为这样做更好,因为它实际上使用了第58天的值,以防变化:
data.frame(Day = '58', A = 1000, B = 2000, C = 5000) %>% # or other values
bind_rows(df1 %>% mutate(across(-Day, ~(as.numeric(.x)+1)))) %>%
mutate(across(-Day, ~cumprod(.x)))
Day A B C
1 58 1000 2000 5000
2 59 1100 2400 6500
3 60 1760 3600 9100https://stackoverflow.com/questions/72737576
复制相似问题