私の動機は、このデータフレームを分割して、各分割が「開始」で始まり「終了」で終わるようにすることです。
Input Format :
> df
sampleData proc_id
1 begin 0
2 mid 0
3 mid 0
4 mid 0
5 mid 0
6 end 0
7 begin 0
8 mid 0
9 mid 0
10 mid 0
11 mid 0
12 mid 0
13 mid 0
14 end 0
15 begin 0
16 mid 0
17 mid 0
18 mid 0
19 mid 0
20 end 0
> df$proc_id[1:6]<-1
> df$proc_id[7:14]<-2
> df$proc_id[15:20]<-3
Output Format:
> df
sampleData proc_id
1 begin 1
2 mid 1
3 mid 1
4 mid 1
5 mid 1
6 end 1
7 begin 2
8 mid 2
9 mid 2
10 mid 2
11 mid 2
12 mid 2
13 mid 2
14 end 2
15 begin 3
16 mid 3
17 mid 3
18 mid 3
19 mid 3
20 end 3
私は、forループを記述し、データフレームの各行にprocess_id(begin、mid、endがそのステージ)を割り当てることを検討してきました。次に、このprocess_idを分割すると、各プロセスが個別のデータフレームに分割されます。
私ができるもう1つのアプローチは、すべての「開始」アイテムのインデックスを取得することです。次に、apply()呼び出しで使用される関数への追加の引数としてそれを渡します。
私はRの初心者なので、誰かが私にもっと良いアプローチを提案できますか。それを達成するためのパッケージがある場合は、それについても教えてください。
ありがとう
解決策をありがとうasmohamed。しかし、目的の出力を得るために、ソリューションを微調整する必要がありました。最終的な解決策は次のとおりです。
> df$proc_id<-0
> begins <- which(df$sampleData=="begin")
> ends <- which(df$sampleData=="end") +1
> inter <- intersect(begins, ends)
> inter<-c(1,inter,length(df$sampleData)+1)
> df$proc_id <- do.call(function(x)rep(x-1, inter[x]-inter[x-1]), list(2:length(inter) ))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加