删除R中文件中重复两次的无序对

时间:2014-07-14 18:17:26

标签: r

我在R中有这样的文件。

**0 1** 
0   2
**0 3**
0   4
0   5
0   6
0   7
0   8
0   9
0   10
**1 0**
1   11
1   12
1   13  
1   14
1   15
1   16
1   17
1   18
1   19
**3 0**

正如我们所看到的,在此(标记对)中存在类似的无序对,例如,

 1  0 

 0  1

我希望删除这些对。而且我想计算我拥有的这类对的数量,并将数量附加在重复的拖曳前面。如果不重复,则应在第三列中写入1。

例如(输出文件的样本)

0   1    2
0   2    1
0   3    2
0   4    1 
0   5    1
0   6    1
0   7    1
0   8    1
0   9    1
0   10   1
1   11   1
1   12   1
1   13   1
1   14   1
1   15   1
1   16   1
1   17   1
1   18   1
1   19   1

如何在R中实现它?

2 个答案:

答案 0 :(得分:4)

以下是使用transformpminpmax按行重新排序数据,然后使用aggregate提供计数的方法:

# data
x <- data.frame(a=c(rep(0,10),rep(1,10),3),b=c(1:10,0,11:19,0))

#logic
aggregate(count~a+b,transform(x,a=pmin(a,b), b=pmax(a,b), count=1),sum)
   a  b count
1  0  1     2
2  0  2     1
3  0  3     2
4  0  4     1
5  0  5     1
6  0  6     1
7  0  7     1
8  0  8     1
9  0  9     1
10 0 10     1
11 1 11     1
12 1 12     1
13 1 13     1
14 1 14     1
15 1 15     1
16 1 16     1
17 1 17     1
18 1 18     1
19 1 19     1

答案 1 :(得分:2)

这是一种方法:

首先,创建一个已排序并粘贴在一起的列的矢量。

x <- apply(mydf, 1, function(x) paste(sort(x), collapse = " "))

然后,使用ave创建您要查找的计数。

mydf$count <- ave(x, x, FUN = length)

最后,您可以再次使用“x”向量,这次是检测并删除重复的值。

mydf[!duplicated(x), ]
#    V1 V2 count
# 1   0  1     2
# 2   0  2     1
# 3   0  3     2
# 4   0  4     1
# 5   0  5     1
# 6   0  6     1
# 7   0  7     1
# 8   0  8     1
# 9   0  9     1
# 10  0 10     1
# 12  1 11     1
# 13  1 12     1
# 14  1 13     1
# 15  1 14     1
# 16  1 15     1
# 17  1 16     1
# 18  1 17     1
# 19  1 18     1
# 20  1 19     1