У меня есть набор данных с вложенными группами и без некоторых строк:
set.seed(123)
df <- data.frame(Gr1 = rep(c("x", "y"), each = 10),
Gr2 = rep(c("x1", "x2", "y1", "y2"), each = 5),
ID = paste0(rep(c("x", "y"), each = 10), letters[1:5]),
var1 = round(rnorm(20), 2),
var2 = round(rnorm(20), 2))
rmv.rows <- sample(1:20, 5)
df <- df[-rmv.rows, ]
Gr1 Gr2 ID var1 var2
1 x x1 xa -0.56 -1.07
3 x x1 xc 1.56 -1.03
4 x x1 xd 0.07 -0.73
6 x x2 xa 1.72 -1.69
7 x x2 xb 0.46 0.84
9 x x2 xd -0.69 -1.14
10 x x2 xe -0.45 1.25
11 y y1 ya 1.22 0.43
12 y y1 yb 0.36 -0.30
15 y y1 ye -0.56 0.82
16 y y2 ya 1.79 0.69
17 y y2 yb 0.50 0.55
18 y y2 yc -1.97 -0.06
19 y y2 yd 0.70 -0.31
20 y y2 ye -0.47 -0.38
Я хотел бы заполнить недостающие строки (т.е. комбинации Gr1
, Gr2
и ID
) нулями.
Я пробовал подходы, предложенные здесь, однако он возвращает все возможные комбинации Gr1
, Gr2
и ID
, а не те, которые присутствуют в данных. Другими словами, я хотел бы вставить только существующие комбинации Gr1
, Gr2
и ID
. Желаемый результат должен быть:
Gr1 Gr2 ID var1 var2
1 x x1 xa -0.56 -1.07
2 x x1 xb 0.00 0.00
3 x x1 xc 1.56 -1.03
4 x x1 xd 0.07 -0.73
5 x x1 xe 0.00 0.00
6 x x2 xa 1.72 -1.69
7 x x2 xb 0.46 0.84
8 x x2 xc 0.00 0.00
9 x x2 xd -0.69 -1.14
10 x x2 xe -0.45 1.25
11 y y1 ya 1.22 0.43
12 y y1 yb 0.36 -0.30
13 y y1 yc 0.00 0.00
14 y y1 yd 0.00 0.00
15 y y1 ye -0.56 0.82
16 y y2 ya 1.79 0.69
17 y y2 yb 0.50 0.55
18 y y2 yc -1.97 -0.06
19 y y2 yd 0.70 -0.31
20 y y2 ye -0.47 -0.38
complete
df %>% group_by(Gr1, Gr2) %>% complete(ID, fill = list(var1 = 0, var2 = 0))
- person akrun   schedule 04.06.2019x
,x2
иya
, что нежелательно. - person Adela   schedule 04.06.2019df %>% group_by(Gr1) %>% complete(Gr2, ID, fill = list(var1 = 0, var2 = 0))
- person sindri_baldur   schedule 04.06.2019