R中时间序列数据的增长率

R中时间序列数据的增长率,r,ggplot2,data.table,time-series,rate,R,Ggplot2,Data.table,Time Series,Rate,我的问题是如何实现一个函数来计算数据表中个人几天的增长率。这是形态数据,因此生长率将按对数体大小第i天-对数体大小第i-1天计算。换句话说,今天的体型——昨天的体型。我每个小组有5个人,为期10天。找到每个人每天的增长率是这篇文章的目标,并重新创建发布的图表,但每天的增长率。附件是一些模拟数据 任何建议都将不胜感激。好的,我不擅长data.table,但这里有一个尝试 首先,我将重新生成您的数据 图书馆管理员 设定种子100 制作数据 日期% 解组 为了让滞后正常工作,我想不出一个更好的解决方案

我的问题是如何实现一个函数来计算数据表中个人几天的增长率。这是形态数据,因此生长率将按对数体大小第i天-对数体大小第i-1天计算。换句话说,今天的体型——昨天的体型。我每个小组有5个人,为期10天。找到每个人每天的增长率是这篇文章的目标,并重新创建发布的图表,但每天的增长率。附件是一些模拟数据

任何建议都将不胜感激。

好的,我不擅长data.table,但这里有一个尝试

首先,我将重新生成您的数据

图书馆管理员 设定种子100 制作数据 日期% 解组 为了让滞后正常工作,我想不出一个更好的解决方案,那就是做一个更宽的透视图,每个人都做滞后,然后旋转回长格式:

结果% pivot\u widernames\u from=cgrp,id, 值_from=车身尺寸%>% 变异_atvars-date, listgrowth=~。-滞后%>% pivot\u较长日期,名称\u to=cgrp,id, 名称\u模式=[0-9]+\u[0-9]+,, 值到=增长%>% 滤器是纳格罗斯吗 现在,我有点不确定你想要的情节是什么。你提到了5个人,但你有10个身份证。如果我们分别绘制它们,绘图会变得有点混乱,但是您可以使用aes来分隔每一行

情节 结果呢,, aesx=日期,y=增长,组=id+ geom_lineposition=标识, aescolor=as.factorgrp,尺寸=2,线型=2+ geom_pointsize=2+ 主题_最小值+ labsx=日期,y=车身尺寸mm,颜色=组 或者,我们当然可以在每个id上对每个组进行平均,以获得更整洁的绘图,如果您喜欢的话:

替代地块 ggplotresult%>%按日期分组,grp%>%summarisegrp=平均增长率, aesx=日期,y=grp_平均值,组=grp+ geom_lineposition=标识, aescolor=as.factorgrp,尺寸=2,线型=2+ geom_pointsize=2+ 主题_最小值+ labsx=日期,y=车身尺寸mm,颜色=组 由v0.2.1于2019-12-06创建

完全编辑以获得更好的尝试。

好的,我不擅长data.table,但这里有一个在tidyverse中的尝试

首先,我将重新生成您的数据

图书馆管理员 设定种子100 制作数据 日期% 解组 为了让滞后正常工作,我想不出一个更好的解决方案,那就是做一个更宽的透视图,每个人都做滞后,然后旋转回长格式:

结果% pivot\u widernames\u from=cgrp,id, 值_from=车身尺寸%>% 变异_atvars-date, listgrowth=~。-滞后%>% pivot\u较长日期,名称\u to=cgrp,id, 名称\u模式=[0-9]+\u[0-9]+,, 值到=增长%>% 滤器是纳格罗斯吗 现在,我有点不确定你想要的情节是什么。你提到了5个人,但你有10个身份证。如果我们分别绘制它们,绘图会变得有点混乱,但是您可以使用aes来分隔每一行

情节 结果呢,, aesx=日期,y=增长,组=id+ geom_lineposition=标识, aescolor=as.factorgrp,尺寸=2,线型=2+ geom_pointsize=2+ 主题_最小值+ labsx=日期,y=车身尺寸mm,颜色=组 或者,我们当然可以在每个id上对每个组进行平均,以获得更整洁的绘图,如果您喜欢的话:

替代地块 ggplotresult%>%按日期分组,grp%>%summarisegrp=平均增长率, aesx=日期,y=grp_平均值,组=grp+ geom_lineposition=标识, aescolor=as.factorgrp,尺寸=2,线型=2+ geom_pointsize=2+ 主题_最小值+ labsx=日期,y=车身尺寸mm,颜色=组 由v0.2.1于2019-12-06创建


为了更好的尝试而完全编辑。

这很好,但这并不完全是我想要的。问题是我让一个人每天重复测量10天。所以,我试图通过观察几天来找到一种计算方法。对不起,我第一次完全误解了你。这有点棘手,但请参阅完全编辑的文章,尝试一下-我不擅长data.table,所以我将其切换到tidyverse,希望没问题。在我写这篇文章的时候,我对5个人和10个ID有点困惑,以及你到底在寻找什么样的情节,但是如果你想要一些不同的东西,请告诉我。这很好,但这并不完全是我想要的。问题是我让一个人每天重复测量10天。所以,我试图通过观察几天来找到一种计算方法。对不起,我第一次完全误解了你。这有点棘手,但请参阅完全编辑的文章,尝试一下-我不擅长data.table,所以我将其切换到tidyverse,希望没问题。在我写的时候,我对这个问题有点困惑 5个人vs.10个ID,以及你要找的具体情节,但如果你想要不同的东西,请告诉我。
library(ggplot2)
library(data.table)

set.seed(100)

# Making data table
date <- rep(1:10, each=10)
id <- rep(1:10, 10)
grp <- rep(1:2, each=5)

# Adding random body size per group and averaging
dt <- as.data.table(cbind(date, grp, id))
dt[grp==1, bodysize:=rnorm(50, mean=6)]
dt[grp==2, bodysize:=rnorm(50, mean=7)]
dt <- dt[, mean.Body:=mean(bodysize), list(date, grp)]

# Plot
ggplot(data=dt, aes(x=date, y=mean.Body, group=grp)) + 
  geom_line(position="identity", aes(color=as.factor(grp)), size= 2, linetype= 2) +
  geom_point(size=2) +
  theme_minimal() + 
  labs(x= "Date", y= "Body size (mm)", color="Group" )