嗨,我有一个数据集,看起来像这样。我想创建一个新列,该列是一个指示器,用于显示组的日期是否为"最新"。
我在下面附上了一个样本数据:
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', ''))