2017-05-01 8 views
2

私は事故のデータフレーム(dfと呼ぶ)を持っています。それぞれの事故には、それに関連する#、関連する人物ごとの#、事故の種類があります。条件文に基づいてデータフレームから行を削除しますか?

x    y     z 
accident #1 person A accident type #1 
accident #1 person A accident type #2 
accident #2 person A accident type #1 
accident #2 person B accident type #2 
accident #2 person B accident type #3 
accident #3 person C accident type #1 

上記のケースでは、人Aは2つの事故に関与していました。最初の事故では、人物Aが関与していた2種類の事故があった。人Bは人Aに関与していたが、事故の種類が2つある1つの事故にのみ関与していた。人Cも1回の事故に関与していた。

私はを集めたいと思っています。ただ一つの事故に巻き込まれた人々のサブセット。しかし、私はすべての事故タイプを含める必要があります。上記の例を使用して、私はこれが欲しいと思います:

x    y     z 
accident #2 person #2 accident type #2 
accident #2 person #2 accident type #3 
accident #3 person #3 accident type #1 

私はこれをRでどうやってしますか?

+1

インデント4つのコードブロックを作るためのスペース、またはハイライト表示し、を押しCtrlキーを使用することができます+ K – Frank

+0

これはかなり一般的な操作であるので、googleをこのようにしてください – MichaelChirico

+0

@MichaelChirico私はRが新しく、Googleに正確に何がわかりません。私が見つけたものは、私の特定のケースと一致しません。 –

答えて

3

あなたはgroup_byfilter、およびn_distinctを使用して、dplyr packageでこれを行うことができます。

library(dplyr) 
df %>% 
    group_by(y) %>% 
    filter(n_distinct(x) == 1) %>% 
    ungroup() 
0

我々はdata.table

library(data.table) 
setcolorder(setDT(df)[, .SD[uniqueN(x)==1] , y], names(df))[] 
#   x  y    z 
#1: accident #2 person B accident type #2 
#2: accident #2 person B accident type #3 
#3: accident #3 person C accident type #1 
関連する問題