複数のシーケンスを含むデータフレームを使用しています。
例:
df <- data.frame(time=(1:15),value = runif(15,0,1),window=c("start","busy","busy","end",0,0,"start",
"end",0,"start","busy","end","start","end",0))
time value window
1 0.2511834 start
2 0.3024602 busy
3 0.9286721 busy
4 0.6067609 end
5 0.4926921 0
6 0.6618985 0
7 0.9934828 start
8 0.1178294 end
9 0.2216256 0
10 0.8140705 start
11 0.1642058 busy
12 0.3906732 end
13 0.1873062 start
14 0.8071036 end
15 0.3448706 0
このwindow
列には、さまざまな時間枠/シーケンスが表示されます。ウィンドウはstart
値から値まででend
あり、busy
値もカウントされます。ウィンドウごとに、すべての値が最終的に持つ値と同じである必要があります。だからこのように:
time value window
1 1 0.6067609 start
2 2 0.6067609 busy
3 3 0.6067609 busy
4 4 0.6067609 end
5 5 0.4926921 0
6 6 0.6618985 0
7 7 0.1178294 start
8 8 0.1178294 end
9 9 0.2216256 0
10 10 0.3906732 start
11 11 0.3906732 busy
12 12 0.3906732 end
13 13 0.8071036 start
14 14 0.8071036 end
15 15 0.3448706 0
の場合window == 0
、値もゼロにすることができますが、その方法はわかっています。誰かが私の質問に対する答えを知っていますか?
使用data.table
:
library(data.table)
setDT(df)
df[window == "end", group := seq_len(.N)]
df[window != "0", group := nafill(group, "nocb")]
df[window != "0", value := last(value), by = group]
df[, group := NULL]
df[window == "0", value := 0]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加