2

Rでdata.frameの重複行のみを選択する方法に苦労しています。たとえば、私のdata.frameは次のとおりです。

age=18:29
height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
Names=c("John","John","John", "Harry", "Paul", "Paul", "Paul", "Khan", "Khan", "Khan", "Sam", "Joe")
village <- data.frame(Names, age, height)

 Names age height
 John  18   76.1
 John  19   77.0
 John  20   78.1
 Harry  21   78.2
 Paul  22   78.8
 Paul  23   79.7
 Paul  24   79.9
 Khan  25   81.1
 Khan  26   81.2
 Khan  27   81.8
 Sam  28   82.8
 Joe  29   83.5

私は次のように結果を見たい:

Names age height
John  18   76.1
John  19   77.0
John  20   78.1
Paul  22   78.8
Paul  23   79.7
Paul  24   79.9
Khan  25   81.1
Khan  26   81.2
Khan  27   81.8

御時間ありがとうございます...

4

5 に答える 5

6

2回使用するソリューションduplicated

village[duplicated(village$Names) | duplicated(village$Names, fromLast = TRUE), ]


   Names age height
1   John  18   76.1
2   John  19   77.0
3   John  20   78.1
5   Paul  22   78.8
6   Paul  23   79.7
7   Paul  24   79.9
8   Khan  25   81.1
9   Khan  26   81.2
10  Khan  27   81.8

代替ソリューションby:

village[unlist(by(seq(nrow(village)), village$Names, 
                  function(x) if(length(x)-1) x)), ]
于 2013-01-11T08:42:43.593 に答える
3
village[ duplicated(village),]
于 2013-01-11T08:38:49.147 に答える
1

「最もきちんとした」複製を使用して@Svenの答えを見つけましたが、これは他の多くの方法で行うこともできます。さらに 2 つあります。

  1. table()集計が > 1 である名前を最初の列に存在する名前と一致させることにより、サブセットを使用します。

    village[village$Names %in% names(which(table(village$Names) > 1)), ]
    
  2. ave()少し異なる方法で「集計」するために使用しますが、同じ方法でサブセット化します。

    village[with(village, ave(as.numeric(Names), Names, FUN = length) > 1), ]
    
于 2013-01-11T09:48:36.833 に答える