在长(时间序列)数据中添加带有 NA 的缺失行
Add missing rows with NA in long (time series) data
假设我有一个不完整的 data.frame
长格式:
mydata <- data.frame(year = rep(c(2000,2001,2002,2004),
2),
team = factor(c("A","A","A","A",
"B","B","B","B")),
score = c(8,1,3,1,2,3,7,2))
如您所见,缺少 year
2003 年的观察结果:
mydata
year team score
1 2000 A 8
2 2001 A 1
3 2002 A 3
4 2004 A 1
5 2000 B 2
6 2001 B 3
7 2002 B 7
8 2004 B 2
有没有一种优雅的方法来添加缺失的行(在正确的位置)?
我希望 team
变量填充所有可能的级别,score
填充 NA
...
我更喜欢干净的 dplyr
解决方案,如果有 (-;
最后mydata
应该是这样的:
year team score
1 2000 A 8
2 2001 A 1
3 2002 A 3
4 2003 A NA
5 2004 A 1
6 2000 B 2
7 2001 B 3
8 2002 B 7
9 2003 B NA
10 2004 B 2
This expand.grid
solution 几乎解决了问题,但我不知道如何将它应用到 data.frame
的长格式。
您可以使用 complete()
来自 tidyr
:
library(tidyr)
library(dplyr)
mydata %>% group_by(team) %>%
complete(year = full_seq(year, 1))
#1 A 2000 8
#2 A 2001 1
#3 A 2002 3
#4 A 2003 NA
#5 A 2004 1
#6 B 2000 2
#7 B 2001 3
#8 B 2002 7
#9 B 2003 NA
#10 B 2004 2
假设我有一个不完整的 data.frame
长格式:
mydata <- data.frame(year = rep(c(2000,2001,2002,2004),
2),
team = factor(c("A","A","A","A",
"B","B","B","B")),
score = c(8,1,3,1,2,3,7,2))
如您所见,缺少 year
2003 年的观察结果:
mydata
year team score
1 2000 A 8
2 2001 A 1
3 2002 A 3
4 2004 A 1
5 2000 B 2
6 2001 B 3
7 2002 B 7
8 2004 B 2
有没有一种优雅的方法来添加缺失的行(在正确的位置)?
我希望 team
变量填充所有可能的级别,score
填充 NA
...
我更喜欢干净的 dplyr
解决方案,如果有 (-;
最后mydata
应该是这样的:
year team score
1 2000 A 8
2 2001 A 1
3 2002 A 3
4 2003 A NA
5 2004 A 1
6 2000 B 2
7 2001 B 3
8 2002 B 7
9 2003 B NA
10 2004 B 2
This expand.grid
solution 几乎解决了问题,但我不知道如何将它应用到 data.frame
的长格式。
您可以使用 complete()
来自 tidyr
:
library(tidyr)
library(dplyr)
mydata %>% group_by(team) %>%
complete(year = full_seq(year, 1))
#1 A 2000 8
#2 A 2001 1
#3 A 2002 3
#4 A 2003 NA
#5 A 2004 1
#6 B 2000 2
#7 B 2001 3
#8 B 2002 7
#9 B 2003 NA
#10 B 2004 2