私は、野生の動物の観察(記録日時、場所、種の識別)を含むデータフレーム(R)を扱っています。特定の種が含まれている行を、データフレーム全体でx個以下の観測値がある場合は削除したいと考えています。今のところ、私は次のコードで動作させることができましたが、よりエレガントで効率的な方法が必要であることがわかりました。変数の頻度に基づいてデータフレームの行を削除する
namelist <- names(table(ind.data$Species))
for (i in 1:length(namelist)) {
if (table(ind.data$Species)[namelist[i]] <= 2) {
while (namelist[i] %in% ind.data$Species) {
j <- match(namelist[i], ind.data$Species)
ind.data <- ind.data[-j,]
}
}
}
namelist
ベクターは、リスト上の名前番目i
の周波数をx(この例では2
)未満であるかどうかを確認するために、データフレームind.data
、及びif
ステートメントチェック内のすべての種名を含みます。
これは非常にクリーンな方法ではないことを十分に認識しており、昨日の終わりにそれを一緒に投げて機能するかどうかを確認しました。今私はそれを行うためのよりよい方法を探しています。
これは完全に働いた、ありがとう!また、大規模なデータセットでは、特に以前からの私のハックな 'for'ループと比べて、かなり高速です。 – twieg
@twiegはい、data.tableは非常に高速です – akrun