代码之家  ›  专栏  ›  技术社区  ›  C_psy

按组查找第一个实例并填充到R中的新列

  •  0
  • C_psy  · 技术社区  · 7 年前

    我有以下资料:

    ID Date 
    1  01/01/2018
    2  01/01/2010
    2  01/01/2012
    2  01/01/2013
    3  01/01/2015
    3  01/01/2018
    

    我已经按ID升序排列了这些列,但是现在我想查找每个ID的第一个日期实例(这将是最早的日期),并用这个日期填充一个新列。

    所以:

    ID Date        NewDate
     1  01/01/2018 01/01/2018
     2  01/01/2010 01/01/2010
     2  01/01/2012 01/01/2010
     2  01/01/2013 01/01/2010
     3  01/01/2015 01/01/2015
     3  01/01/2018 01/01/2015
    

    一如既往地感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Ronak Shah    7 年前

    由于数据已经排序,您可以 first 每组的值

    library(dplyr)
    df %>%
       group_by(ID) %>%
       mutate(NewDate = first(Date))
    
    #    ID Date       NewDate   
    #  <int> <fct>      <fct>     
    #1     1 01/01/2018 01/01/2018
    #2     2 01/01/2010 01/01/2010
    #3     2 01/01/2012 01/01/2010
    #4     2 01/01/2013 01/01/2010
    #5     3 01/01/2015 01/01/2015
    #6     3 01/01/2018 01/01/2015
    

    在R基地,我们可以用 ave

    df$NewDate <- with(df, ave(Date, ID, FUN = function(x) x[1]))
    
    df
    #  ID       Date    NewDate
    #1  1 01/01/2018 01/01/2018
    #2  2 01/01/2010 01/01/2010
    #3  2 01/01/2012 01/01/2010
    #4  2 01/01/2013 01/01/2010
    #5  3 01/01/2015 01/01/2015
    #6  3 01/01/2018 01/01/2015
    

    我们也可以用 head 具有 大道

    df$NewDate <- with(df, ave(Date, ID, FUN = head, 1))
    

    min 假如 Date 列为“日期”类

    df$NewDate <- with(df, ave(Date, ID, FUN = min))
    

    dplyr 那会是

    df %>%
      group_by(ID) %>%
      mutate(NewDate = min(Date))
    
    推荐文章