寻找一种用新值填充向量的方法,该条件取决于该向量中的值以及数据帧中的另一个变量。粘贴了下面的数据示例。
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] 删除。
我来说两句