我正在努力将上一组的价值转移到下一组。我尝试使用它来解决它rleid,但无法获得所需的结果。
df <- data.frame(signal = c(1,1,5,5,5,2,3,3,3,4,4,5,5,5,5,6,7,7,8,9,9,9,10),
desired_outcome = c(NA, NA, 1, 1, 1, 5, 2, 2, 2, 3, 3, 4, 4,4,4,5,6,6,7,8,8,8,9))
# outcome column has the expected result -
signal desired_outcome
1 1 NA
2 1 NA
3 5 1
4 5 1
5 5 1
6 2 5
7 3 2
8 3 2
9 3 2
10 4 3
11 4 3
12 5 4
13 5 4
14 5 4
15 5 4
16 6 5
17 7 6
18 7 6
19 8 7
20 9 8
21 9 8
22 9 8
23 10 9
Run Code Online (Sandbox Code Playgroud)
rle将给出出现相同值的序列的lengths和。values然后:删除最后一个值,将剩余的移动values一个,NA在值的开头添加一个以考虑删除最后一个值,并重复由下式给出的每个值lengths(即lengths原始向量中相同值的序列)。
with(rle(df$signal), rep(c(NA, head(values, -1)), lengths))
# [1] NA NA 1 1 1 5 2 2 2 3 3 4 4 4 4 5 6 6 7 8 8 8 9
Run Code Online (Sandbox Code Playgroud)