r-如何获取每个名称的最大日期中的值



我需要使用dplyr mutate来创建一个新列,该列可以向我显示每个最大日期的值(可能是重复的值(。

library(dplyr)
set.seed(1234)
df <- data.frame(
dates = seq.Date(as.Date("2022-08-23"), 
as.Date("2022-09-11"),
by = "days"),
names = c(
"a", 
"a",
"b",
"c",
"a",
"a",
"c",
"b",
"a",
"a",
"b",
"c",
"a",
"b",
"c",
"d",
"b",
"a",
"b",
"c"   
),
value = rnorm(20,0,1)
)
glimpse(df)
df

如何使用mutate插入一列,重复每个名称的最大日期值,直到名称更改?

library(dplyr)
df %>%
arrange(names, dates) %>% 
group_by(names) %>% 
mutate(last_val = last(value))
# A tibble: 20 × 4
# Groups:   names [4]
dates      names   value max_val
<date>     <chr>   <dbl>   <dbl>
1 2022-08-23 a     -1.21    -0.911
2 2022-08-24 a      0.277   -0.911
3 2022-08-27 a      0.429   -0.911
4 2022-08-28 a      0.506   -0.911
5 2022-08-31 a     -0.564   -0.911
6 2022-09-01 a     -0.890   -0.911
7 2022-09-04 a     -0.776   -0.911
8 2022-09-09 a     -0.911   -0.911
9 2022-08-25 b      1.08    -0.837
10 2022-08-30 b     -0.547   -0.837
11 2022-09-02 b     -0.477   -0.837
12 2022-09-05 b      0.0645  -0.837
13 2022-09-08 b     -0.511   -0.837
14 2022-09-10 b     -0.837   -0.837
15 2022-08-26 c     -2.35     2.42 
16 2022-08-29 c     -0.575    2.42 
17 2022-09-03 c     -0.998    2.42 
18 2022-09-06 c      0.959    2.42 
19 2022-09-11 c      2.42     2.42 
20 2022-09-07 d     -0.110   -0.110

或者,如果您不关心订购

df %>% 
group_by(names) %>% 
mutate(last_val = last(value, order_by = dates))

这就是您想要的吗?:

选择每组中具有最大值的行

或者,您的问题是首先选择具有最大日期的名称,然后计算所选日期的最大值?:

我首先选择正确的时间:

df_date = df %>% group_by(names) %>%  mutate(group_max_dates = max(dates)) %>% ungroup()

然后我从第一步中选择了正确的时间:

df_date_selected = df[df$dates %in% unique(df_date$group_max_dates),]

然后我计算了最大值:

results = df_date_selected  %>% group_by(dates, names) %>%  mutate(group_max_dates_names = max(value)) %>% ungroup()
df %>% group_by(dates, names) %>%  mutate(group_max_dates_names = max(value)) %>% ungroup()

我不确定,因为根据您的数据,在最大日期中只有一个名称值!但如果它们是它们的倍数,就会更加清晰:(

希望它能有所帮助!

最新更新