我想对 Dataframe 进行子集化,使其只包含具有三列唯一组合的行。我的情况与this问题中的情况类似,但我也想保留数据中的其他列。下面是我的示例:
> df
v1 v2 v3 v4 v5
1 7 1 A 100 98
2 7 2 A 98 97
3 8 1 C NA 80
4 8 1 C 78 75
5 8 1 C 50 62
6 9 3 C 75 75
请求的输出如下所示,我在这里查找仅基于v1、v2和v3的唯一案例:
> df.new
v1 v2 v3 v4 v5
1 7 1 A 100 98
2 7 2 A 98 97
3 8 1 C NA 80
6 9 3 C 75 75
如果我能恢复非唯一行,那也太好了:
> df.dupes
v1 v2 v3 v4 v5
3 8 1 C NA 80
4 8 1 C 78 75
5 8 1 C 50 62
我在sql(here)中看到了一个相关的问题,关于如何做到这一点,但我在R中无法得到这个问题。我确信这很简单,但混乱的unique()和subset()并没有产生什么效果。
7条答案
按热度按时间voase2hg1#
您可以使用
duplicated()
函数查找唯一组合:要仅获取重复项,可以在两个方向上选中它:
41ik7eoe2#
使用
dplyr
可以执行以下操作:qlvxas9a3#
您可以使用
plyr
软件包:gmxoilav4#
是的,但是如果你有太多的数据,使用plyr和ddply是非常非常慢的。
你应该试试这样的东西:
或:
在大多数情况下我们会更快。
测试一下然后告诉我们
有一些错误,但我猜你可以修复这些,只要你得到的想法。
我也尝试独特的和所有
dvtswwa35#
我知道这是一个很老的问题,但无论如何,我认为使用unique()函数的明显解决方案也应该在这里给出:
或按名称指定列:
...并指定行:
pprl5pva6#
如果您使用的是
data.table
,那么很容易使一个或多个变量具有唯一的大小写。dojqjjoe7#
一种不优雅但实用的方法是将给定行的条目粘贴在一起,并查找哪些是唯一(或非唯一)行,如下所示:
然后使用类似下面的命令获取副本的索引: