首页 > 解决方案 > 查找每个组的第一个实例并填充到 R 中的新列

问题描述

我有以下df:

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

一如既往地感谢任何帮助。

标签: rdate

解决方案


由于数据已经排序,您可以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

在 Base 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

我们也可以使用headwithave

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

或者按照@Hugh 的建议,使用min提供Date的列属于“日期”类

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

其中dplyr将是

df %>%
  group_by(ID) %>%
  mutate(NewDate = min(Date))

推荐阅读