R增量-避免循环
我的数据是这样的。 每个id都被观察了好几次。 主要是每次观察的结果 我需要做的是每次主体发生变化时增加,因此每次观察的结果都与前一次不同 例如,第一个观测结果是20,然后是30,然后是连续的12 我最终需要的是这个R增量-避免循环,r,loops,R,Loops,我的数据是这样的。 每个id都被观察了好几次。 主要是每次观察的结果 我需要做的是每次主体发生变化时增加,因此每次观察的结果都与前一次不同 例如,第一个观测结果是20,然后是30,然后是连续的12 我最终需要的是这个 > dtd id main ep 1 1 20 1 2 1 30 2 3 1 12 3 4 1 12 3 5 1 12 3 6 1 15 4 7 1 15 4 8 2 30 1 9 2
> dtd
id main ep
1 1 20 1
2 1 30 2
3 1 12 3
4 1 12 3
5 1 12 3
6 1 15 4
7 1 15 4
8 2 30 1
9 2 12 2
10 2 12 2
11 2 23 3
12 2 23 3
因此,每当每个id发生变化时,都会增加
欢迎任何建议
我提出了这个循环,但它相当麻烦
for(i in 2:nrow(dtd)){
if(dtd$id[i] == dtd$id[i-1] & dtd$main[i] != dtd$main[i-1] ){
dtd$ep[i] = dtd$ep[i-1] + 1
}
if(dtd$id[i] == dtd$id[i-1] & dtd$main[i] == dtd$main[i-1] ){
dtd$ep[i] = dtd$ep[i-1]
}
}
谢谢
数据
dtd <- structure(list(id = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2), main = c(20,
30, 12, 12, 12, 15, 15, 30, 12, 12, 23, 23), ep = c(1, 2, 3,
3, 3, 4, 4, 1, 2, 2, 3, 3)), .Names = c("id", "main", "ep"), row.names =
c(NA, -12L), class = "data.frame")
您可以使用ave:
我发现cumsum和diff很难使用和调试,所以我会使用
library(data.table)
setDT(DF)[, ep := rleid(main), by=id]
给
id main ep
1 1 20 1
2 1 30 2
3 1 12 3
4 1 12 3
5 1 12 3
6 1 15 4
7 1 15 4
8 2 30 1
9 2 12 2
10 2 12 2
11 2 23 3
12 2 23 3
id main ep
1: 1 20 1
2: 1 30 2
3: 1 12 3
4: 1 12 3
5: 1 12 3
6: 1 15 4
7: 1 15 4
8: 2 30 1
9: 2 12 2
10: 2 12 2
11: 2 23 3
12: 2 23 3
library(data.table)
setDT(DF)[, ep := rleid(main), by=id]
id main ep
1: 1 20 1
2: 1 30 2
3: 1 12 3
4: 1 12 3
5: 1 12 3
6: 1 15 4
7: 1 15 4
8: 2 30 1
9: 2 12 2
10: 2 12 2
11: 2 23 3
12: 2 23 3