R–将函数应用于列表中的特定列

标签 r

我有一个数据框 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循环遍历 listtransform创建“最大日期”

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/

相关文章:

r - 一旦运行 foreach 循环,Windows 7 上的 doRedis 就会出错

r - 在ggplot中对齐绘图区域

R - 每日汇总到每周汇总,开始日期为周六

r - 扩展两个值之间的组并计算唯一出现的次数

r - 大矩阵 : solve(crossprod(X)) when dim(X) = 100, 000:5000

r - 加速 R 中向量的 setdiff()、intersect()、union() 操作

r - 嵌套 ifelse 语句

r - R : getting rules with only one item in the left-hand side 中的封装规则

r - 如何使用 paste 粘贴特定名称

r - 使用 bwplot 分组水平箱线图