找到重复行的索引 - 跟进

时间:2014-12-26 20:16:12

标签: r

我正在寻找一种方法来查找重复行的索引。 在这里搜索后我发现了这个 - Find indices of duplicated rows

看起来很不错,但我想问一下是否有办法让#c;" clump"重复行的索引在一起。我试着在评论中提出这个问题,但系统不会让我这么做。

事情是 - 我的DF中有重复的单元格。我需要知道两行的位置,其中有一个副本供我查看原始数据以及哪一行是错误的。 索引重复的简单输出意味着我仍然需要找到" twin"我自己。 任何想法?

再次,我很抱歉在提出一个新问题时,这显然是一个已经问过的问题的后续问题。

3 个答案:

答案 0 :(得分:0)

也许你想要这样的东西,使用相关问题的样本数据:

df <- data.frame(a = c(1,2,3,4,1,5,6,4,2,1))
x <- lapply(df$a, function(x) which(df$a == x))
names(x) <- df$a

> x
#$`1`
#[1]  1  5 10
#
#$`2`
#[1] 2 9
#
#$`3`
#[1] 3
#
#$`4`
#[1] 4 8
#
#$`1`
#[1]  1  5 10
#
#$`5`
#[1] 6
#
#$`6`
#[1] 7
#
#$`4`
#[1] 4 8
#
#$`2`
#[1] 2 9
#
#$`1`
#[1]  1  5 10

你也可以这样做:

df$twin <- sapply(x, toString)
#   a     twin
#1  1 1, 5, 10
#2  2     2, 9
#3  3        3
#4  4     4, 8
#5  1 1, 5, 10
#6  5        6
#7  6        7
#8  4     4, 8
#9  2     2, 9
#10 1 1, 5, 10

答案 1 :(得分:0)

您似乎想要一个将所有重复行组合在一起的结果。

# example: want to group based on duplicates in df$a
df <- data.frame(a = c(1,2,3,4,1,5,6,4,2,1),b=1:10,c=21:30)
do.call(rbind,lapply(which(table(df$a)>1),function(x)df[df$a==x,]))
#      a  b  c
# 1.1  1  1 21
# 1.5  1  5 25
# 1.10 1 10 30
# 2.2  2  2 22
# 2.9  2  9 29
# 4.4  4  4 24
# 4.8  4  8 28

因此,在此示例中,df包含3行df$a==1,2行df$a==2和2行df$a==4。所有其他行都具有唯一值df$a。这组装了一个新的数据框,只有重复的行组合在一起。

答案 2 :(得分:0)

这是我用来标记对象中所有重复项的函数:

allDup <- function (value) 
{
    duplicated(value) | duplicated(value, fromLast = TRUE)
}

它从正面扫描,然后从背面扫描以标记它们。