【问题标题】:How to find duplicates in subgroups in R如何在 R 中的子组中查找重复项
【发布时间】:2020-01-08 11:19:17
【问题描述】:

我有很多这样的病人的检查数据。

   PN CEA_VAL TEST_DAYS
1   1     2.3        25
2   1     4.6        49
3   1     5.8        67
4   3     1.8        25
5   3     6.7        69
6   4     1.9        44
7   4     3.4        87
8   5     12.4       25
9   5     16.4       25

PN 是患者编号。 CEA_VAL 是生物测试值。 TEST_DAYS 是从治疗开始到进行生物测试的时间间隔。

如果把每一个病人都看成一个亚组,那么不同亚组之间的TEST_DAYS相同是可以的。

但我怀疑一个子组中有一些重复的 TEST_DAYS。 如何在每个子组中找到 TEST_DAYS 的重复项,如何删除它们?

一天内对同一位患者进行多次生物测试是不合逻辑的。 因为生物测试通常会在几周后再次进行。

【问题讨论】:

  • 如果您提供示例数据,最好包含一些(可能是虚构的)实际显示问题的数据,例如为其中一位具有重复的TEST_DAYS 值的患者增加一行。
  • df %>% group_by(PN) %>% filter(!duplicated(TEST_DAYS)) 使用dplyr
  • 感谢您的提示。我添加了另一个虚构的患者数据。并且代码有效。

标签: r duplicates


【解决方案1】:

如果患者有重复的日期,则以下代码应仅返回每天的第一行:

library(dplyr)

my_df %>%
  group_by(PN, TEST_DAYS) %>%
  slice(1) %>%
  ungroup()

【讨论】:

    【解决方案2】:

    您可以为每个患者使用duplicated 来获取重复值并仅选择唯一值。

    这可以在基础 R 中完成:

    subset(df, !ave(TEST_DAYS, PN, FUN = duplicated))
    
    #  PN CEA_VAL TEST_DAYS
    #1  1     2.3        25
    #2  1     4.6        49
    #3  1     5.8        67
    #4  3     1.8        25
    #5  3     6.7        69
    #6  4     1.9        44
    #7  4     3.4        87
    #8  5    12.4        25
    

    dplyr

    library(dplyr)
    df %>% group_by(PN) %>% filter(!duplicated(TEST_DAYS))
    

    data.table

    library(data.table)
    setDT(df)
    df[df[,!duplicated(TEST_DAYS), PN]$V1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      相关资源
      最近更新 更多