【问题标题】:R find one column same but other column duplicatesR找到一列相同但其他列重复
【发布时间】:2017-06-08 07:55:45
【问题描述】:

我正在使用 R 并试图在数据框中找到一个列值不同但其他 4 个列值相同的行:

I.E.

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 

无论如何要这样做?

谢谢

【问题讨论】:

  • 在我看来,您的问题归结为与第一组固定行重复并且与它们的前辈不同的行?对吗?

标签: r dataframe filter subset


【解决方案1】:

我们可以使用data.table。将 'data.frame' 转换为 'data.table' (setDT(df1)),按列 c2 到 c5 (names(df1)[3:6])、iflengthunique (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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多