2016-11-15 9 views
3

私はいくつかの変数を持つデータセットを持っていますが、私は2列に基づいて同じ行を保持したいと思います。ここで私は何をしたいの例です。rの2つの変数に同じ値を持つ行を保持する方法はありますか?

a <- c(rep('A',3), rep('B', 3), rep('C',3)) 
b <- c(1,1,2,4,4,4,5,5,5) 
df <- data.frame(a,b) 

    a b 
1 A 1 
2 A 1 
3 A 2 
4 B 4 
5 B 4 
6 B 4 
7 C 5 
8 C 5 
9 C 5 

私は、重複機能を使用する場合、私は得ることができることを知っている:

df[!duplicated(df),] 

    a b 
1 A 1 
3 A 2 
4 B 4 
7 C 5 

しかし、列a上のレベル「A」はないので、

a b 
4 B 4 
7 C 5 

私は全体に値を繰り返していると気にしない:bに一意の値を持って、私はこのような新しいdata.frameを取得するには、両方の観測をドロップしたいです同じレベルのすべてがaの場合は、bに同じ値があります。

これを行う方法はありますか?ありがとう!

答えて

2

これは多分?

ag <- aggregate(b~a, df, unique) 
ag[lengths(ag$b)==1,] 

# a b 
#2 B 4 
#3 C 5 
+1

'' の値が 'である場合、これはテストしない –

+0

@PierreLafortune B'おかげしかし持つ別のオプションですどういう意味ですか? – 989

+1

Aの複数のb値は、すべてのA行を破棄するのに十分です。これは大丈夫です。 – hedgedandlevered

0

はたぶん、このような何か:ここ

> ind <- apply(sapply(with(df, split(b,a)), diff), 2, function(x) all(x==0)) 
> out <- df[!duplicated(df),] 
> out[out$a %in% names(ind)[ind], ] 
    a b 
4 B 4 
7 C 5 
0

data.table

library(data.table) 
setDT(df)[, if(uniqueN(b)==1) .SD[1L], by = a] 
# a b 
#1: B 4 
#2: C 5 
関連する問題