【发布时间】:2014-03-03 20:32:54
【问题描述】:
我有一个包含这些值的数据框(以这种方式构建):
id1 = (c(1,1,2,2))
id2 = (c(10,11,10,11))
value =c(50,50,50,50)
df = data.frame(id1,id2,value)
df :
value id1 id2
1 50 1 10
2 50 1 11
3 50 2 10
4 50 2 11
我想只保留 id1 和 id2 都是唯一的行(id1 和 id2 的每个值必须只出现一次),而且每个 id 可能有多个重复:
df_unique :
value id1 id2
1 50 1 10
4 50 2 11
如果我在其中一列上使用重复的命令,然后在另一列上使用,我会丢弃想要的行。
返回 (1,11) 和 (2,10) 的解决方案也很好,只要其中的每个元素 id1 和 id2 是唯一的。
另一个有更多行的例子:
id1 = (c(1,1,1,2,2,2,3,3,3))
id2 = (c(10,11,12,10,11,12,10,11,12))
value =rep(50,9)
df = data.frame(id1,id2,value)
df:
id1 id2 value
1 1 10 50
2 1 11 50
3 1 12 50
4 2 10 50
5 2 11 50
6 2 12 50
7 3 10 50
8 3 11 50
9 3 12 50
一个好的答案是:(1,10),(2,11),(3,12),但任何其他 id1 和 id2 都出现一次的答案都是好的。
谢谢,
雅各布
【问题讨论】:
-
如何决定是否1,10; 2,11被保留或者可以是1,11; 2,10?
-
在您的示例中,这两个值都出现了两次。我不明白你的问题。
-
可能只是简单地做"unique(df)"。
-
Ananta - 我编辑的问题 (1,11) (2,10) 也很好。 Davide- unique(df) 将返回相同的矩阵,因为每一行都是唯一的
-
类似:
x <- lapply(df[, -1], duplicated); df[!xor(x$id1, x$id2), ]
标签: r dataframe unique duplicate-removal