R找到一列相同但其他列重复

时间:2017-01-23 17:52:16

标签: r dataframe filter subset

我正在使用R并尝试在数据框中查找行,其中一列值不同但其他4列值相同:

rn c1 c2 c3 c4 c5 c6
1 t  a  b  c  d  e
2 f  a  b  c  d  g
3 t  1  2  3  4  5 
4 t  1  2  3  4  5 
5 t  1  2  3  4  5 
6 f  a  b  c  d  e 
7 f  a  b  c  d  e
8 t  a  b  c  d  e 

所以在这种情况下只有行: 1.在c2-c5栏中有重复值 2.但在c1中也有不同的价值 将继续。

 rn c1 c2 c3 c4 c5 c6
 1  t  a  b  c  d  e
 2  f  a  b  c  d  g
 6  f  a  b  c  d  e 
 7  f  a  b  c  d  e
 8  t  a  b  c  d  e 

无论如何要这样做?

由于

1 个答案:

答案 0 :(得分:0)

我们可以使用data.table。转换' data.frame'到' data.table' (setDT(df1)),按列c2到c5(names(df1)[3:6]),if lengthunique)元素的uniqueN分组' C1'大于1,我们将data.table(.SD

分组
library(data.table)
setDT(df1)[, if(uniqueN(c1)>1) .SD, c(names(df1)[3:6])][, names(df1), with= FALSE]
#   rn c1 c2 c3 c4 c5 c6
#1:  1  t  a  b  c  d  e
#2:  2  f  a  b  c  d  g
#3:  6  f  a  b  c  d  e
#4:  7  f  a  b  c  d  e
#5:  8  t  a  b  c  d  e

dplyr中的等效选项是

library(dplyr)
df1 %>%
    group_by_(.dots = names(df1)[3:6]) %>%
    filter(n_distinct(c1) > 1)
#     rn    c1    c2    c3    c4    c5    c6
#  <int> <chr> <chr> <chr> <chr> <chr> <chr>
#1     1     t     a     b     c     d     e
#2     2     f     a     b     c     d     g
#3     6     f     a     b     c     d     e
#4     7     f     a     b     c     d     e
#5     8     t     a     b     c     d     e