我有一个像这样的data.frame -
set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
x y z
1 0 1 1
2 1 0 2
3 0 1 3
4 1 1 4
5 1 0 5
6 0 1 6
7 1 0 7
8 1 0 8
9 1 0 9
10 0 1 10
我想根据前两列删除重复的行 . 预期产量 -
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
我正在寻找使用 dplyr
包的解决方案 .
4 回答
为了完整起见,以下内容也有效:
但是,我更喜欢使用
distinct
的解决方案,我怀疑它也更快 .这是一个使用
dplyr 0.3
的解决方案 .Updated for dplyr 0.5
dplyr版本0.5
distinct()
的默认行为仅返回...
参数中指定的列 .要获得原始结果,您现在必须使用:
注意:
dplyr
现在包含用于此目的的distinct
函数 .原答案如下:
一种方法是分组,然后只保留第一行:
(在dplyr 0.2中你不需要虚拟
z
变量,只能写row_number() == 1
)我一直在考虑添加一个
slice()
函数,它的工作原理如下:或者可以使用
unique()
的变体来选择要使用的变量:在R中选择减少数据集的列时,通常最终会出现重复数据 .
这两行给出了相同的结果 . 每个输出一个唯一的数据集,只有两个选定的列: