R 当数据为长格式时计算速率
我的数据样本可用 我试图计算每只R 当数据为长格式时计算速率,r,if-statement,dplyr,grouping,R,If Statement,Dplyr,Grouping,我的数据样本可用 我试图计算每只松鼠的生长率(随着时间的推移体重的变化(wt) 当我有宽格式的数据时: squirrel fieldBirthDate date1 date2 date3 date4 date5 date6 age1 age2 age3 age4 age5 age6 wt1 wt2 wt3 wt4 wt5 wt6 litterid 22922 2017-05-13
松鼠的生长率(随着时间的推移体重的变化(wt
)
当我有宽格式的数据时:
squirrel fieldBirthDate date1 date2 date3 date4 date5 date6 age1 age2 age3 age4 age5 age6 wt1 wt2 wt3 wt4 wt5 wt6 litterid
22922 2017-05-13 2017-05-14 2017-06-07 NA NA NA NA 1 25 NA NA NA NA 12 52.9 NA NA NA NA 7684
22976 2017-05-13 2017-05-16 2017-06-07 NA NA NA NA 3 25 NA NA NA NA 15.5 50.9 NA NA NA NA 7692
22926 2017-05-13 2017-05-16 2017-06-07 NA NA NA NA 0 25 NA NA NA NA 10.1 48 NA NA NA NA 7719
我能够使用以下代码计算增长率:
library(dplyr)
#growth rate between weight 1 and weight 3, divided by age when weight 3 is recorded
growth <- growth %>%
mutate (g.rate=((wt3-wt1)/age3))
#growth rate between weight 1 and weight 2, divided by age when weight 2 is recorded
merge.growth <- merge.growth %>%
mutate (g.rate=((wt2-wt1)/age2))
我不能使用上面使用的mutate
函数。我希望创建一个新专栏,包括以下增长率:
squirrel litterid date age wt g.rate
22922 7684 2017-05-13 0 NA NA
22922 7684 2017-05-14 1 12 NA
22922 7684 2017-06-07 25 52.9 1.704
22976 7692 2017-05-13 1 NA NA
22976 7692 2017-05-16 3 15.5 NA
22976 7692 2017-06-07 25 50.9 1.609
22926 7719 2017-05-14 0 10.1 NA
22926 7719 2017-06-08 25 48 1.516
22758 7736 2017-05-03 0 8.8 NA
22758 7736 2017-05-28 25 43 1.368
22758 7736 2017-07-05 63 126 1.860
22758 7736 2017-07-23 81 161 1.879
22758 7736 2017-07-26 84 171 1.930
我一直在用excel计算增长率(每个wt
和第一次称重之间的增长率),但是我想用R代替,因为我有大量的松鼠要处理。我怀疑if-else循环
可能是实现这一点的方法,但我并不精通这种编码。欢迎提出任何建议或想法 您可以使用group_by
为每只松鼠计算:
group_by(df, squirrel) %>%
mutate(g.rate = (wt - nth(wt, which.min(is.na(wt)))) /
(age - nth(age, which.min(is.na(wt)))))
这就留下了NaN
s,其中age
项为零,但是如果您想使用df$g.rate[is.NaN(df$g.rate)]您可以使用group_by
为每只松鼠计算该值:
group_by(df, squirrel) %>%
mutate(g.rate = (wt - nth(wt, which.min(is.na(wt)))) /
(age - nth(age, which.min(is.na(wt)))))
这就留下了NaN
s,其中age
项为零,但是如果您想使用df$g.rate[is.NaN(df$g.rate)]替代方法,您可以使用data.table及其上一行的函数“shift”将其更改为NA
s
library(data.table)
df= data.table(df)
df[,"growth":=(wt-shift(wt,1))/age,by=.(squirrel)]
使用data.table及其函数“shift”替代上一行
library(data.table)
df= data.table(df)
df[,"growth":=(wt-shift(wt,1))/age,by=.(squirrel)]
这正是我需要的。谢谢你的帮助!这正是我需要的。谢谢你的帮助!