私はRの初心者です。データを分析するためのすべての素晴らしい機能を発見しました。イベントの変化を検出してデータ フレームをフィルタリングしたい。たとえば、次のデータを取得したとします。
testcase date event
1 TESTCASE1 2013-06-12 18:12:09 EVENT1
2 TESTCASE1 2013-06-12 18:12:12 EVENT1
3 TESTCASE1 2013-06-12 18:12:15 EVENT2
4 TESTCASE1 2013-06-12 18:12:16 EVENT2
5 TESTCASE1 2013-06-12 18:12:25 EVENT1
6 TESTCASE2 2013-06-12 18:12:10 EVENT4
7 TESTCASE2 2013-06-12 18:12:16 EVENT4
8 TESTCASE2 2013-06-12 18:12:17 EVENT2
9 TESTCASE2 2013-06-12 18:12:26 EVENT2
10 TESTCASE2 2013-06-12 18:12:30 EVENT1
イベントが変更された行だけを返したいです。この例では、次のようになります。
testcase date event
2 TESTCASE1 2013-06-12 18:12:12 EVENT1
3 TESTCASE1 2013-06-12 18:12:15 EVENT2
4 TESTCASE1 2013-06-12 18:12:16 EVENT2
5 TESTCASE1 2013-06-12 18:12:25 EVENT1
7 TESTCASE2 2013-06-12 18:12:16 EVENT4
8 TESTCASE2 2013-06-12 18:12:17 EVENT2
9 TESTCASE2 2013-06-12 18:12:26 EVENT2
10 TESTCASE2 2013-06-12 18:12:30 EVENT1
これを行う唯一の方法は、ループを使用することです。それは次のコードを与えます:
result <- data.frame( testcase =
c("TESTCASE1","TESTCASE1","TESTCASE1","TESTCASE1","TESTCASE1","TESTCASE2","TESTCASE2","TESTCASE2","TESTCASE2","TESTCASE2"),
date = c("2013-06-12 18:12:09","2013-06-12 18:12:12","2013-06-12 18:12:15","2013-06-12 18:12:16","2013-06-12 18:12:25","2013-06-12 18:12:10","2013-06-12 18:12:16","2013-06-12 18:12:17","2013-06-12 18:12:26","2013-06-12 18:12:30"),
event = c("EVENT1","EVENT1","EVENT2","EVENT2","EVENT1","EVENT4","EVENT4","EVENT2","EVENT2", "EVENT1"))
tc <- result[1,"testcase"]
currentDate <- result[1,"date"]
currentEvent <- result[1,"event"]
#index variable de sortieoutput
j <- 1
output <- c()
for(i in 2:length(result[,1])){
if(tc != result[i,"testcase"]){
tc <- result[i,"testcase"];
currentEvent <- result[i,"event"]
}else{
#detection de handhover
if(result[i,"event"] != currentEvent){
output[j] <- i-1
output[j+1] <- i
j <- j+2
currentEvent <- result[i,"event"]
}
}
}
output_data <- result[unique(output),]
しかし、Rでは、ループは推奨されておらず、(非常に)遅く、データセットも非常に大きいです。より R に準拠したソリューションを使用するアイデアはありますか?