gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:02:00 25 4
gpt4 key购买 nike

我有一个数据框 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com