为每个组中的最新日期创建新的列指标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为每个组中的最新日期创建新的列指标相关的知识,希望对你有一定的参考价值。

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

我在下面附加了示例数据:

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",""))

想知道有人能指出我正确的方向。

答案

将日期更改为日期类后,我们可以将日期与每个max中的Group日期值进行比较,并使用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', ''))

以上是关于为每个组中的最新日期创建新的列指标的主要内容,如果未能解决你的问题,请参考以下文章

计算列组中的列数

拆垛一个多指标熊猫数据帧,同时保持相同的列

按最新日期获取分组后的列

SQL - 需要在单个表中标识多个组中的最新条目

具有共同 id 的组中具有最大天数的两个日期之间的差异

从一个开始枚举每组中的行