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