首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建依赖于它的变量,在R中滞后值

创建依赖于它的变量,在R中滞后值
EN

Stack Overflow用户
提问于 2014-07-11 03:55:31
回答 1查看 211关注 0票数 0

我有一个面板数据集,其中包含以下列/变量: Week(t)、Custid(i)、Activity(i、t)、Initial(i)和大量其他变量。我需要创建一个新的变量体验(i,t) = alpha *体验(i,t-1) +活动(i,t-1)。经验的初始值(i,0)=初始(I)。我是R的新手,刚开始从SAS到R的过渡,我如何在客户层面和每周创建新的可变体验。也就是说,该变量在第一周t周的值将取决于该变量在过去一周(t-1)的滞后值,再加上客户i在过去一周(t-1)所做的活动。请帮帮忙,我有一个超级紧迫的时间来解决这个问题。真诚感谢您的所有帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-11 04:13:44

我假设这是您的输入数据

代码语言:javascript
复制
#sample data
set.seed(15)
dd<-data.frame(
     week=rep(1:5, 3), 
     cust=rep(1:3, each=5), 
     activity=runif(15)
)
init<-c(1,2,3)
alpha<-.5

看起来就像

代码语言:javascript
复制
   week cust  activity
1     1    1 0.6021140
2     2    1 0.1950439
3     3    1 0.9664587
4     4    1 0.6509055
5     5    1 0.3670719
6     1    2 0.9888592
7     2    2 0.8151934
8     3    2 0.2539684
9     4    2 0.6872308
10    5    2 0.8314290
11    1    3 0.1046694
12    2    3 0.6461509
13    3    3 0.5090904
14    4    3 0.7066286
15    5    3 0.8623137

然后我们计算出

代码语言:javascript
复制
Experience <- Map(function(i,d) 
    Reduce(function(a,b) 
        {alpha*a + b}, d$activity, i, accumulate=TRUE),
    init, split(dd, dd$cust)
)

我们使用外部Map来迭代使用split创建的每个客户的初始值和数据子集。然后,内部Reduce实现了您所描述的滞后算法。

然后,要将其加入到表中,我们需要从列表中删除初始值,并按顺序重新堆栈这些值。我们可以用

代码语言:javascript
复制
ExpCol <- unsplit(lapply(Experience, tail, -1), dd$cust)
cbind(dd, ExpCol)

这给了我们

代码语言:javascript
复制
   week cust  activity    ExpCol
1     1    1 0.6021140 1.1021140
2     2    1 0.1950439 0.7461009
3     3    1 0.9664587 1.3395092
4     4    1 0.6509055 1.3206601
5     5    1 0.3670719 1.0274020
6     1    2 0.9888592 1.9888592
7     2    2 0.8151934 1.8096230
8     3    2 0.2539684 1.1587799
9     4    2 0.6872308 1.2666208
10    5    2 0.8314290 1.4647394
11    1    3 0.1046694 1.6046694
12    2    3 0.6461509 1.4484856
13    3    3 0.5090904 1.2333332
14    4    3 0.7066286 1.3232952
15    5    3 0.8623137 1.5239612
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24689859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档