【问题标题】:Unique combination per group每组独特的组合
【发布时间】:2018-06-12 15:34:18
【问题描述】:

我有一个包含三列的 DT,前两个具有按 Group 分组的各种值。

ID            ID_2                    Group
23201600101793 2016052016051062331    A
23201600101793 2016062016061017838    A
23201600101794 2016052016051062331    A
23201600101794 2016052016051062402    A
23201600103090 2016052016051062325    A
23201600103090 2016052016051062408    A
23201600803366 2016052016051062325    A
23201600803366 2016052016051062408    A

我需要找到两列的唯一组合,并且在任何列中都没有重复值。我想要的输出是 A 组是

ID            ID_2                    Group
23201600101793 2016052016051062331    A
23201600101794 2016052016051062402    A
23201600103090 2016052016051062325    A
23201600803366 2016052016051062408    A

第 3 行和第 7 行被删除,因为它们在第 1 行和第 5 行的 ID_2 列中分别具有重复值。删除了第 2、4、6 和 8 行,因为它们重复了第 1、3、5、7 行中列 ID 的值。

没有按组的模式,它们可以有许多具有相同 ID 或 ID_2 的行。

例如,从 B 组我只需要 2 行,因为 ID 有两个唯一值。选定的行可以是第一行(我的意思是,所有 ID_2 行,但第一行将被丢弃,因为第一行有两个唯一值)

ID            ID_2                 Group
23201600009182 2016042016041000942 B
23201600009182 2016042016041000943 B
23201600009182 2016042016041000946 B
23201600009182 2016042016041000949 B
23201600009182 2016042016041000950 B
23201600009182 2016042016041000951 B
23201600009182 2016042016041000953 B
23201600009182 2016042016041000954 B
23201600009182 2016042016041000956 B
23201600009182 2016042016041000957 B
23201600009182 2016042016041000958 B
23201600669635 2016052016051003624 B
23201600669635 2016052016051003626 B
23201600669635 2016052016051003628 B
23201600669753 2016012016011000791 B
23201600669753 2016012016011000797 B

B组的期望输出

23201600009182 2016042016041000942 B   
23201600669635 2016052016051003624 B

感谢您的帮助。

【问题讨论】:

  • 在您的DT 中有5 个唯一值ID_2ID 中的4 个,对吗?你知道在 R 中使用 large numbers 吗?

标签: r unique distinct


【解决方案1】:

据我了解,您希望 GroupID 是唯一的。

您可以在 dplyr 中使用distinict

library(dplyr)

#sample data
set.seed(123)
sample_data <- tibble(ID = sample(1:4,size = 10,replace = T),
                      ID2 = sample(1:4,size = 10,replace = T),
                      group = sample(c("A","B"),size = 10,replace = T))

样本数据:

> sample_data
# A tibble: 10 x 3
ID   ID2 group
<int> <int> <chr>
    1     2     4 B    
2     4     2 B    
3     2     3 B    
4     4     3 B    
5     4     1 B    
6     1     4 B    
7     3     1 B    
8     4     1 B    
9     3     2 A    
10     2     4 A   

#sample result
distinct(sample_data,ID,group,.keep_all=T)

样本结果:

# A tibble: 6 x 3
ID   ID2 group
<int> <int> <chr>
    1     2     4 B    
2     4     2 B    
3     1     4 B    
4     3     1 B    
5     3     2 A    
6     2     4 A  

【讨论】:

  • 但这与预期的输出不同。
  • 这个函数的结果加上我贴的DT,是不行的。它获取ID的唯一值,但ID_2是重复的。
猜你喜欢
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多