在data.frame中显示重复记录并忽略单个记录

在data.frame中显示重复记录并忽略单个记录,r,duplicates,dataframe,R,Duplicates,Dataframe,我一直在努力解决如何在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

我一直在努力解决如何在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
感谢您抽出时间…

使用重复两次的解决方案:

village[ duplicated(village),]
另一种解决方案是:

使用重复两次的解决方案:

另一种解决方案是:


我发现@Sven的答案使用的是复制的,这是最整洁的,但是你也可以用很多其他的方法。这里还有两个:

通过将表格>1的名称与第一列中的名称进行匹配,使用表格和子集:

village[village$Names %in% names(which(table(village$Names) > 1)), ]
使用ave以稍微不同的方式制表,但子集的方式相同:

village[with(village, ave(as.numeric(Names), Names, FUN = length) > 1), ]

我发现@Sven的答案使用的是复制的,这是最整洁的,但是你也可以用很多其他的方法。这里还有两个:

通过将表格>1的名称与第一列中的名称进行匹配,使用表格和子集:

village[village$Names %in% names(which(table(village$Names) > 1)), ]
使用ave以稍微不同的方式制表,但子集的方式相同:

village[with(village, ave(as.numeric(Names), Names, FUN = length) > 1), ]

我用nested sapply提出了一个解决方案:

> village_dups = 
village[unique(unlist(which(sapply(sapply(village$Names,function(x) 
which(village$Names==x)),function(y) length(y)) > 1))),]
> village_dups
   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

我用nested sapply提出了一个解决方案:

> village_dups = 
village[unique(unlist(which(sapply(sapply(village$Names,function(x) 
which(village$Names==x)),function(y) length(y)) > 1))),]
> village_dups
   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

@SvenHohenstein,这个答案的代表一直在跳来跳去。也许OP没有意识到只有一个答案是可以接受的@SvenHohenstein,这个答案的代表一直在跳来跳去。也许OP没有意识到只有一个答案是可以接受的;