r-为每个组中的最新日期创建新的列指示符



嗨,我有一个数据集,看起来像这样。我想创建一个新列,该列是一个指示器,用于显示组的日期是否为"最新"。

我在下面附上了一个样本数据:

Item    Group   Date
item1   a   1/1/2019
item2   a   2/1/2019
item3   a   3/1/2019
item6   b   1/1/2019
item7   b   2/1/2019
item8   b   2/1/2019
item9   b   3/1/2019

对于每个组(a或b(,我想创建一个指标,显示日期是否是其组中的最新日期。我附上了一个我想完成的事情的样本:

Item    Group   Date    Indicator
item1   a   1/1/2019    
item2   a   2/1/2019    
item3   a   3/1/2019    Latest
item6   b   1/1/2019    
item7   b   2/1/2019    
item8   b   3/1/2019    
item9   b   4/1/2019    Latest

到目前为止,这是我的代码。它可以找到最新的日期,但似乎没有按集团分开。

data$Indicator <- ifelse(data$Date == max(data$Date) & data$Group == "a", "Latest",
ifelse(data$Date == max(data$Date) & data$Group == "b", "Latest","")) 

我意识到data$Date == max(data$Date)语句无法区分组,所以我尝试使用mutate,但似乎设置错误。

data %>% 
group_by(Group) %>% 
mutate(Indicator = ifelse(data$Date == max(data$Date), "Latest",""))

想知道是否有人能为我指明正确的方向。

更改日期到日期类后,我们可以将每个Group中的日期与max日期值进行比较,并使用ifelse分配Indicator

library(dplyr)
df %>%
mutate(Date = as.Date(Date, '%m/%d/%Y')) %>%
group_by(Group) %>%
mutate(Indicator = ifelse(Date == max(Date), 'Latest', ''))
# Item  Group Date       Indicator
#  <chr> <chr> <date>     <chr>    
#1 item1 a     2019-01-01 ""       
#2 item2 a     2019-02-01 ""       
#3 item3 a     2019-03-01 "Latest" 
#4 item6 b     2019-01-01 ""       
#5 item7 b     2019-02-01 ""       
#6 item8 b     2019-02-01 ""       
#7 item9 b     2019-03-01 "Latest" 

另一种方法可以是arrange数据,并在每组的最后一行分配"Latest"Indicator

df %>%
mutate(Date = as.Date(Date, '%m/%d/%Y')) %>%
arrange(Group, Date) %>%
group_by(Group) %>%
mutate(Indicator = ifelse(row_number() == n(), 'Latest', ''))

最新更新