【发布时间】:2019-08-17 05:21:31
【问题描述】:
我试图用折旧率计算累积和。
我有一个带有列号的分组数据框。 我想一一加上折旧的数字。 如果比率为 1,则基数 r 中的 cumsum 函数就足够了。 但如果没有,假设 0.5 的比率(意味着每个数字将乘以 0.5 以添加下一个数字), cumsum 是不够的。 我尝试编写自己的函数来使用 dplyr,但它失败了。
library(tidyverse)
# dataframe
id=sample(1:5,25,replace=TRUE)
num=rnorm(25)
df=data.frame(id,num)
# my custom function
depre=function(data){
rate=0.5
r=nrow(data)
sl=data$num
nl=data$num
for (i in 2:r){
sl[i]=sl[i-1]*rate+nl[i]
}
return(sl)
}
# work with one group
df %>% filter(id==1) %>% depre(.)
# failed to work with dplyr
df %>% group_by(id) %>% mutate(sl=depre(.))
我希望列 s 的第一个元素应该与列 num 中的相同。
但是下面的,应该按 0.5 倍折旧并添加下一个 num。
它在一组中工作,但在多组数据框中失败。
错误消息是:“错误:列 sl 的长度必须为 6(组大小)或 1,而不是 25”。
我不知道。谁能有线索?
谢谢
【问题讨论】: