【问题标题】:Separate unique and duplicate entries in dataframe based off id根据 id 分隔数据框中的唯一和重复条目
【发布时间】:2014-07-15 01:56:00
【问题描述】:

我有一个带有 id 变量的数据框,它可能是重复的。我想将其拆分为两个数据框,一个仅包含 id 重复的条目,另一个仅显示唯一的 id。这样做的最佳方法是什么?

例如,假设我有数据框:

dataDF <- data.frame(id = c(1,1,2,3,4,4,5,6),
                      a = c(1,2,3,4,5,6,7,8),
                      b = c(8,7,6,5,4,3,2,1))

即以下

  id a b
1  1 1 8
2  1 2 7
3  2 3 6
4  3 4 5
5  4 5 4
6  4 6 3
7  5 7 2
8  6 8 1

我想获取以下数据框:

  id a b
1  1 1 8
2  1 2 7
5  4 5 4
6  4 6 3

  id a b
3  2 3 6
4  3 4 5
7  5 7 2
8  6 8 1

我目前这样做如下

dupeIds  <- unique(subset(dataDF, duplicated(dataDF$id))$id)
uniqueDF <- subset(dataDF, !id %in% dupeIds)
dupeDF   <- subset(dataDF, id %in% dupeIds)

这似乎工作,但似乎有点偏离子集三倍,有没有更简单的方法来做到这一点?谢谢

【问题讨论】:

    标签: r duplicates


    【解决方案1】:

    使用duplicated 两次,一次自上而下,一次自下而上,然后使用split 将其全部放入list,如下所示:

    split(dataDF, duplicated(dataDF$id) | duplicated(dataDF$id, fromLast = TRUE))
    # $`FALSE`
    #   id a b
    # 3  2 3 6
    # 4  3 4 5
    # 7  5 7 2
    # 8  6 8 1
    # 
    # $`TRUE`
    #   id a b
    # 1  1 1 8
    # 2  1 2 7
    # 5  4 5 4
    # 6  4 6 3
    

    如果您需要在工作区中将其拆分为单独的 data.frames(不确定为什么您需要这样做),请将 names 分配给列表项(例如 @987654327 @) 然后使用list2env

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-12
      • 2023-03-07
      • 1970-01-01
      • 2021-09-01
      • 2015-08-05
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      相关资源
      最近更新 更多