【问题标题】:identify duplicates and make column with common id r [duplicate]识别重复项并创建具有公共 ID r 的列 [重复]
【发布时间】:2023-01-31 18:53:46
【问题描述】:

我有一个DF

df <- data.frame(ID = c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'),
                 var1 = c(1, 1, 3, 4, 5, 5, 7, 8),
                 var2 = c(1, 1, 0, 0, 1, 1, 0, 0),
                 var3 = c(50, 50, 30, 47, 33, 33, 70, 46))

其中列 var1 - var3 是建模软件的数值输入。为了节省计算时间,我想在建模软件中模拟 var1 - var3 的唯一实例,然后使用 leftjoin 将结果连接回主数据框。

我需要向每一行添加第二个标识符,以表明它与另一行的 var1-var3 相同。输出将是这样的:

  ID var1 var2 var3 ID2
1  a    1    1   50 ab
2  b    1    1   50 ab
3  c    3    0   30 c
4  d    4    0   47 d
5  e    5    1   33 ef
6  f    5    1   33 ef
7  g    7    0   70 g
8  h    8    0   46 h

我可以在软件中对 var1-var3 和 ID2 的唯一行进行子集化模拟,并使用新的 ID2 将结果连接回主 df。

提前致谢

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    paste

    library(dplyr) #1.1.0
    df %>%
      mutate(ID2 = paste(unique(ID), collapse = ""), 
             .by = c(var1, var2))
    
    #   ID var1 var2 var3 ID2
    # 1  a    1    1   50  ab
    # 2  b    1    1   50  ab
    # 3  c    3    0   30   c
    # 4  d    4    0   47   d
    # 5  e    5    1   33  ef
    # 6  f    5    1   33  ef
    # 7  g    7    0   70   g
    # 8  h    8    0   46   h
    

    请注意,.by 参数是dplyr 1.1.0 的新功能。您仍然可以将 group_byungroup 用于早期版本和/或如果您有更复杂的管道。

    【讨论】:

      【解决方案2】:

      为了识别,我们将使用 duplicated() 函数返回重复行的计数。 ... 方法:

      Create data frame.
      Pass it to duplicated() function.
      This function returns the rows which are duplicated in forms of boolean values.
      Apply sum function to get the number.
      

      【讨论】:

      猜你喜欢
      • 2019-11-19
      • 1970-01-01
      • 2023-01-12
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多