假设我有一个不完整的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
的长形式。
答案 0 :(得分:1)
您可以使用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