有条件的序列数填写R

弓箭手

寻找一种用新值填充向量的方法,该条件取决于该向量中的值以及数据帧中的另一个变量。粘贴了下面的数据示例。

PrsVar= c(rep(1,10),rep(2,7),rep(3,11))
IndVar = c(0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0)
OutVar = c(1,1,1,1,2,2,2,3,3,3,1,1,1,1,2,2,2,1,1,1,1,2,2,2,2,3,3,3)
exampdata <- cbind(PrsVar,IndVar,OutVar)
exampdata <- as.data.frame(exampdata)

> exampdata
   PrsVar IndVar OutVar
1       1      0      1
2       1      0      1
3       1      0      1
4       1      1      1
5       1      0      2
6       1      0      2
7       1      1      2
8       1      0      3
9       1      0      3
10      1      0      3
11      2      0      1
12      2      0      1
13      2      0      1
14      2      1      1
15      2      0      2
16      2      0      2
17      2      1      2
18      3      0      1
19      3      0      1
20      3      0      1
21      3      1      1
22      3      0      2
23      3      0      2
24      3      0      2
25      3      1      2
26      3      0      3
27      3      0      3
28      3      0      3

这是时间序列数据,每一行代表一个人日。PrsVar是研究中某人的ID,并IndVar指示该情节在该人当天结束。第二天的人代表新的情节。

我想创建一个看起来OutVar只使用来自PrsVar的值的变量IndVar这个新变量OutVar标记了每个人日所处的情节,以1为增量,并为每个新个体从1开始。

我可以通过循环来运行它,但是我需要更有效的代码来处理3,000,000+数据行。试图在使用的东西dplyr也许mapply,但我难住了。想办法解决这个问题将对其他人有所帮助,并且在不久的将来对我当然也将有所帮助。

后期邮件

有点丑陋,但此逻辑应易于适应其他方法:

with(exampdata,
  ave(IndVar, PrsVar, FUN=function(x) {
    out <- rev(cumsum(rev(x)))
    max(out) - out + 1
  })
)

# [1] 1 1 1 1 2 2 2 3 3 3 1 1 1 1 2 2 2 1 1 1 1 2 2 2 2 3 3 3

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章