如何对数据进行分区,如果有重复项,则删除组?

时间:2019-04-12 07:41:49

标签: r

我目前有一个看起来像这样的数据框:

{
   "xAxis": [
      { "id": "1", "label": "Dave" },
      { "id": "2", "label": "Laura" }
   ],
   "yAxis": [
      { "id": "1", "label": "Happy" },
      { "id": "2", "label": "Sad" }
   ],
   "options": {
      "maxRowSelections": "1",
      "lockRowOnMaxSelections": "false"
   }
}

如果有重复值,我要删除整个ID组。所以我想要的输出是这样:

   ID val
1   1   a
2   1   b
3   2   a
4   2   b
5   2   b
6   3   c
7   3   a
8   4   a
9   5   a
10  5   b

我遇到了删除单个行而不删除大块数据的解决方案。我会为此使用循环吗?

3 个答案:

答案 0 :(得分:0)

使用dplyr,我们可以group_by ID并选择组,如果该组中没有重复项。

library(dplyr)

df %>%
  group_by(ID) %>%
  filter(!any(duplicated(val)))

#     ID val  
#  <int> <fct>
#1     1 a    
#2     1 b    
#3     3 c    
#4     3 a    
#5     4 a    
#6     5 a    
#7     5 b    

或使用基数R ave

df[!with(df, as.logical(ave(val, ID, FUN = function(x) any(duplicated(x))))), ]

答案 1 :(得分:0)

在基数R中,

df[!df$ID %in% unique(df$ID[duplicated(df)]),]

#   ID val
#1   1   a
#2   1   b
#6   3   c
#7   3   a
#8   4   a
#9   5   a
#10  5   b

答案 2 :(得分:0)

这是另一种base R方法,该方法将tablerowSums一起使用以标识要保留的“ ID”

df[df$ID %in% names(which(!rowSums(table(df) > 1))),]
#    ID val
#1   1   a
#2   1   b
#6   3   c
#7   3   a
#8   4   a
#9   5   a
#10  5   b