R Subset在一行中重复并返回重复项和索引

时间:2016-04-05 10:01:11

标签: python r

我的数据框显示如下:

> df
  c1 c2 c3 c4
1  1  0  1  2
2  2  1  4  3
3  3  3  5  4
4  4  3  6  5
5  5  4  7  7 

我正在尝试对数据框进行子集化,以逐行返回重复元素。即返回行号和在该行中具有重复的相应元素。像这样:

index  duplicates
1       1
3       3
5       7

我尝试过使用以下代码行:

dfc <- apply(df, 1, function(x) duplicated(x))
dfc <- t(dfc)
df[dfc]

[1] 3 1 7

我想让重复元素的相应行索引也返回。特别是在两个以上的元素连续重复的情况下。

1 个答案:

答案 0 :(得分:0)

基于该示例(假设每行只有一对副本)。我们使用applyMARGIN=1为每行提取重复元素。输出将为list,因为有些行没有任何重复项且长度为0.从list输出,通过获取'l1'的'索引'来创建data.frame 'length不等于0,unlist'l1'的'重复'。

l1 <- apply(df, 1, FUN  = function(x) x[duplicated(x)])
data.frame(index = which(lengths(l1)!=0), duplicates = unlist(l1))
#  index duplicates
#1     1          1
#3     3          3
#5     5          7