我有一个数据框 df
看起来像这样:ID
是一定的库存,value
是股票价格的假人,year
由我计算作为辅助列用于拆分以下数据:
id date value year
1 2020-12-30 11 2020
1 2020-12-09 12 2020
1 2020-08-01 13 2020
1 2019-12-30 14 2019
1 2019-12-09 15 2019
1 2019-08-01 16 2019
2 2020-12-30 17 2020
2 2020-12-09 18 2020
2 2020-08-01 19 2020
2 2019-12-29 20 2019
2 2019-12-09 21 2019
2 2019-08-01 22 2019
我想为每年的每个 id 找到我拥有数据的最后一天是什么。通常,这是年末,但在我的大型数据集中并非总是如此,因此我不想对年末进行硬编码。我已经根据 id 和年份将其拆分为一个列表,其中包含以下代码和结果:
list <- split(df, list(df$id, df$year))
现在,在列表的 4 个元素中的每一个中,我想创建一个新列,为我提供相应列表中日期列的最大值。例如。我希望第一个列表元素的输出如下:id date value year maxdate
1 2020-12-30 11 2020 2020-12-30
1 2020-12-09 12 2020 2020-12-30
1 2020-08-01 13 2020 2020-12-30
你能帮我实现想要的输出吗?我曾尝试使用某些版本的 apply 函数系列,但仅根据我的每个列表元素中的日期列无法使其工作。
非常感谢您提前!
此致,
C
最佳答案
我们使用 lapply
循环遍历 list
和 transform
创建“最大日期”
list1 <- lapply(list1, transform, maxdate = max(date))
假设“日期”是 Date
类(class)或使用
tidyverse
library(dplyr)
library(purrr)
list1 <- map(list1, ~ .x %>%
mutate(maxdate = max(date)))
如果我们使用 group by operation 也可以简化而不拆分
df %>%
group_by(id, year) %>%
mutate(maxdate = max(date))
在哪里list1 <- split(df, list(df$id, df$year), drop = TRUE)
注意:最好不要用函数名称命名对象,例如list
关于R–将函数应用于列表中的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65764438/