現在のdata.tableをループでサブセット化しようとしています。プロセスは非常に遅いです。サブセット化する前のデータサンプルを示します。data.tableファイルでより効率的なループを作成
# V1 V2 V3 type
#1: 1 362.25 361.75 A
#2: 1 362.25 361.75 B
#3: 3 362.25 361.75 C
#4: 4 362.75 362.00 C
#5: 8 362.50 362.00 A
#6: 6 362.50 362.00 B
#7: 12 362.50 362.89 A
#8: 8 362.25 362.05 B
#9: 9 362.25 362.00 A
#10: 17 362.25 362.20 B
#11: 29 362.25 362.90 C
#12: 41 362.25 362.40 C
#13: 99 362.25 362.10 C
#14: 81 362.25 362.00 C
変数 "type"に基づいてデータをサブセット化する必要があります。私はすべての行を()にしたいだけで、(data$type="C"
)行が続く場合にのみ、(data$type =="A"
)と(data$type =="B"
)の2つの行が必要です。 (data$type == "C"
)場合は、その行は維持する必要が
# V1 V2 V3 type
#1: 1 362.25 361.75 A
#2: 1 362.25 361.75 B
#3: 3 362.25 361.75 C
#4: 4 362.75 362.00 C
#9: 9 362.25 362.00 A
#10: 17 362.25 362.20 B
#11: 29 362.25 362.90 C
#12: 41 362.25 362.40 C
#13: 99 362.25 362.10 C
#14: 81 362.25 362.00 C
:サブセット化した後、データは次のようになります。行番号1、#2、#9、#10も、"type==C"
行の後に続くため、保持されます。
私は今、ループを使用していますが、非常に遅いです。
data$temp<-"omit"
for (j in 3:nrow(data)){
if (data$type[j] == "C" && data$type[j-1] == "B"
&& data$type[j-2] == "A")
{
data$temp[j] <- "pair" ; data$temp[j-1] <- "pair"; data$temp[j-2] <- "pair"
}
}
for (j in 2:nrow(data)){
if (data$type[j-1] == "C" && data$type[j] == "C"
&& data$temp[j-1] == "pair" && data$temp[j]== "omit")
{
nearby$temp[j] <- "pair"
}
}
data<-data[!(data$temp=="omit"),]
このコードは問題なく機能しますが、遅すぎます。効率を向上させるためのアイデアを教えてください。同じ仕事をしてください。
は、あなたが「C」を持っている行のインデックスを取得するためにwhich
を使用することができます
ドンしてください(
A
とB
が提示された順序で常にあると仮定して)次のようにdata.table
のshift
-functionを使用すると、あなたのデータをサブセットすることができますあなたのコードをhtmlやjavascriptとしてマークする行を追加しないでください。それはディスプレイを台無しにする。 – Frank提案のおかげで@フランク – jester