R でのデータ操作の一般的なタスクの 1 つは、特定の基準に一致する行を削除してデータフレームをサブセット化することです。ただし、R でこれを行う簡単な方法は、論理的に一貫性がなく、未経験者 (私のような) にとっては危険ですらあります。
データフレームがあり、「G1」処理に属する行を除外したいとしましょう:
Treatment=c("G1","G1","G1","G1","G1","G1","G2","G2","G2","G2","G2",
"G2","G3","G3","G3","G3","G3","G3")
Vals=c(runif(6),runif(6)+0.9,runif(6)-0.3)
data=data.frame(Treatment)
data=cbind(data, Vals)
予想どおり、以下のコードは、最初の行の条件に一致するデータフレーム行を削除します
to_del=which(data$Treatment=="G1")
new_data=data[-to_del,]
new_data
ただし、予想に反して、「which」コマンドで一致する行が見つからない場合、このアプローチを使用すると、このコードはすべての行をそのままにするのではなく、すべての行を削除します。
to_del=which(data$Treatment=="G4")
new_data=data[-to_del,]
new_data
上記のコードでは、行が残っていないデータ フレームが生成されますが、これは意味がありません (つまり、R は私の削除基準に一致する行を見つけられなかったため、すべての行を削除しました)。私の回避策は仕事をしますが、これらの条件文をすべて使わずにこれを行う簡単な方法があると思います
###WORKAROUND
to_del=which(data$Treatment=="G4") #no G4 treatment in this particular data frame
if (length(to_del)>0){
new_data=data[-to_del,]
}else{
new_data=data
}
new_data
指定された条件に一致する行がない場合でも機能する、これを行う簡単な方法はありますか?