gpt4 book ai didi

r - 按组添加缺少年份的行

转载 作者:行者123 更新时间:2023-12-05 03:09:07 27 4
gpt4 key购买 nike

我想在 data.frame 中为每个组(公司和类型)的所有缺失年份创建新行。数据框如下所示:

minimal <- data.frame(firm = c("A","A","A","B","B","B","A","A","A","B","B","B"),
type = c("X","X","X","X","X","X","Y","Y","Y","Y","Y","Y"),
year = c(2000,2004,2007,2010,2008,2001,2002,2003,2007,2000,2001,2008),
value = c(1,3,7,9,9,2,3,3,7,5,9,15)
)

数据框:

firm type year value
A X 2000 1
A X 2004 3
A X 2007 7
B X 2010 9
B X 2008 9
B X 2001 2
A Y 2002 3
A Y 2003 3
A Y 2007 7
B Y 2000 5
B Y 2001 9
B Y 2008 15

现在,我想要得到的是:我可以在数据中看到最小年份是 2000 年,最大值是 2010 年。我想为每个公司类型组合的每个缺失年份添加一行。例如。对于公司 A 和类型 X,我想添加行,使其看起来像这样:

最终输出:

firm type year value
A X 2000 1
A X 2004 3
A X 2007 7
A X 2001 1
A X 2002 1
A X 2003 1
A X 2005 3
A X 2006 3
A X 2008 7
A X 2009 7
A X 2010 7

此外,我想将前一年的值写入所有后续年份缺失行的“值”列,直到出现新的非缺失行(如最终输出示例所示)。

我还没有想出任何有用的代码,但到目前为止我发现以下可能是正确的方向:

setDT(minimal)[, .SD[match(2000:2010, year)],
by = c("firm","type")]

我不太了解 setDT 和 .SD 的概念,但这至少为每个公司类型组合创建了一行。但是没有year的内容。

提前致谢!

最佳答案

我找不到一个确切的骗局,所以这是一个可能的解决方案,

library(dplyr)
library(tidyr)

minimal %>%
group_by(firm, type) %>%
complete(year = full_seq(2000:2010, 1)) %>%
fill(value)

关于r - 按组添加缺少年份的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43799109/

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