【问题标题】:Identify groups of repeat rows and preserve group order识别重复行组并保持组顺序
【发布时间】:2019-04-04 14:08:34
【问题描述】:

我正在尝试使用随机重复的“块”来组织患者数据的电子表格。 不幸的是,数据行是随机重复的,给了我重复的“块”。我需要在保留原始顺序的同时删除重复块。

这是一个示例:

+---------+-----+----------+
| patient | age | children |
+---------+-----+----------+
| x       | 30  | g        |
| x       | 30  | b        |
| x       | 30  | g        |
| x       | 30  | b        |
| x       | 30  | g        |
| x       | 30  | b        |
| y       | 25  | g        |
| y       | 25  | b        |
| y       | 25  | b        |
| y       | 25  | g        |
| y       | 25  | b        |
| y       | 25  | b        |
+---------+-----+----------+

可以看到,患者“x”块(有 2 个孩子)重复了 3 次,患者“y”块(有 3 个孩子)重复了两次。重复块的数量是随机的。

这是我的目标: 保持孩子的顺序很重要

+---------+-----+----------+
| patient | age | children |
+---------+-----+----------+
| x       | 30  | g        |
| x       | 30  | b        |
| y       | 25  | g        |
| y       | 25  | b        |
| y       | 25  | b        |
+---------+-----+----------+

我首先在 excel 中尝试了这个: 第 1 步:为所有行提供唯一标识符,以保留子项的顺序 第 2 步:尝试删除重复项,但这对于有 2 个女孩的患者“y”来说是个问题,决赛桌删除了其中一个...

我通常在 R 中进行分析,所以如果有人可以提出建议,这里的 dplyr 解决方案会很棒

除了以下,我迷路了。有没有办法识别独特的群体?

dat %>% group_by(patient)

【问题讨论】:

  • 你试过unique(df)吗?
  • 您没有其他信息吗?例如,我们可以想象一个 z 患者在数据框中有 6 个男孩,并且有重复的块。我们无法先验知道他有多少个男孩(1、2、3 或 6 个男孩,分别为 6、3、2 或没有重复)。我们应该尽量减少孩子的数量吗?
  • 我没有其他信息。不幸的是,数据导出创建了块的随机重复。当患者有 2 个女孩时,unique(df) 会消除
  • 有没有办法使用 rle() 来做到这一点?
  • @Pelilican 是对的:没有办法知道拥有三行 b,b,b 的患者是 3 次重复还是只有一个孩子。您可能会在这里找到一些帮助:stackoverflow.com/q/35246453/5941593

标签: r excel dplyr


【解决方案1】:

dplyr 中的 distinct() 函数可能是您最好的选择;例如:

dat %>% distinct()

您可以通过阅读this blog post 找到更多关于识别和删除 R 中重复数据的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2020-10-13
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多