gpt4 book ai didi

r - 使用 dplyr 将开始和结束日期扩展到不平衡的月度面板

转载 作者:行者123 更新时间:2023-12-04 10:45:51 25 4
gpt4 key购买 nike

我有事件的开始和结束日期,我想将其扩展到每月一次的面板中,我想知道 dplyr 中是否有任何工具可以解决这个问题。下面的代码完成了我想用 ddply() 做的事情。它首先创建一个示例 tibble data.frame(称为“wide”),其中“id”代表一个个体,“HomeNum”是该个体的一个事件。下一行创建一个“日期”变量,它是每个“id”中“HomeNum”组中从“StartDate”到“FinishDate”的月度系列。

library(plyr)
library(dplyr)
library(tibble)
wide =
tibble(
id = c(1, 1, 2, 2, 2),
HomeNum = c(0,1,0,1,2),
StartDate = as.Date(c("2001-01-01", "2001-03-01", "2000-04-01", "2001-02-01", "2002-08-01")),
FinishDate = as.Date(c("2001-02-01", "2002-05-01", "2001-01-01", "2002-07-01", "2002-12-01"))
)
panel =
ddply(wide,
~id+HomeNum,
transform,
date = seq.Date(StartDate, FinishDate, by = "month")
)

我假设 dplyr 作为“plyr 的下一个迭代”,必须有一些方法来实现类似的解决方案(并输出一个 tibble),但以下内容不起作用:

panel = 
wide %>%
group_by(id, HomeNum) %>%
mutate(date = seq.Date(StartDate, FinishDate, by = "month"))

返回

Error in mutate_impl(.data, dots) :
Column `date` must be length 1 (the group size), not 2

坦率地说,令我惊讶的是 ddply() 解决方案有效并且没有抛出类似的错误。

我使用 ddply() 的实现类似于 this question 的答案.

最佳答案

您可以将 date 的元素强制转换为列表并unnest

library(tidyverse)
wide %>%
group_by(id, HomeNum) %>%
mutate(date = list(seq.Date(StartDate, FinishDate, by = "month"))) %>%
unnest(date)

关于r - 使用 dplyr 将开始和结束日期扩展到不平衡的月度面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50441200/

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