2017-04-21 4 views
0

私は16列(変数)の大きなデータフレームを持っており、条件に応じてサイズ(レコード数)を減らす方法が必要です。 Rの中で誰かがこれを行う方法を知っているのだろうかと思います。繰り返しレコードを削除してRを使って1つだけ残す方法は?

これに基づいてファイルを消去する必要があります。 「従業員ID」、「年」、「月」、および「終了」の列があります。変数「Termed」は、0 = Activeおよび1 = Termedとしてコード化されています。したがって、「従業員ID」ごとに多くの行があります(「終了」列に「1」という値が設定されるまで、会社で働いていた年と月ごとに1つずつ)、またはその特定の「従業員ID」(「終了」列の値はすべて「0」です)、その場合は最後のレコードを保持する必要があります。

要約すると、私はちょうど(Termination = 1)の場合、各従業員IDに対して終了= 1であり、終了しなかった人の最後のレコード(Termination変数のすべての値が「0」)のレコードを持つ。

Rでこれを行う方法はありますか?ご協力いただきありがとうございます。

+0

あなたの問題は本当に良いと言いますが、正に、これは本当にシンプルで基本的な問題です。 YoutubeのRの紹介コースをチェックしてください。 – MLEN

+1

サンプルデータセットを提供してください。 – www

答えて

0

ローマに行く方法はたくさんあります。 data.framesの場合は、次のようにする必要があります。

# Generate some dummy data 
employee_data <- data.frame(employee_id = c(rep(1,10),rep(2,10)), year = 1990, month = rep(1:10,2), termination = c(rep(0,10),rep(0,9),1)) 

# Order entries according to wishes 
employee_data <- employee_data[with(employee_data, order(employee_id, -termination, -year, -month)), ] 

# Select first rows per employee_id 
employee_data[! duplicated(employee_data$employee_id), ] 
    employee_id year month termination 
10   1 1990 10   0 
20   2 1990 10   1 

ソートアルゴリズムは非常に高速です。したがって、これは非常に大きなデータセットでも有効です。

厳密には関係ありません:私はdata.tableパッケージを使用します。構文はより良く、大規模なデータの方が効果的です。

関連する問題