按组添加缺少年份的行

2024-02-22

我想在 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 的概念,但这会为每个公司类型组合创建至少一行。然而,今年没有内容。

预先非常感谢!


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

library(dplyr)
library(tidyr)

minimal %>% 
  group_by(firm, type) %>% 
  complete(year = full_seq(2000:2010, 1)) %>% 
  fill(value)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按组添加缺少年份的行 的相关文章

随机推荐