У меня довольно сложная проблема, в которой я хочу сначала заполнить пустые строки и заполнить связанные данные. Следующий шаг, который является более сложным, состоит в том, чтобы заполнить серию уменьшением значения, пока мы не достигнем минимума. Вот данные для примера:
dat <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), id2 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), id3 = c("ID_1",
"ID_1", "ID_1", "ID_1", "ID_1", "ID_2", "ID_3", "ID_4", "ID_5",
"ID_6", "ID_7", "ID_8", "ID_9", "ID_10", "ID_11", "ID_12", "ID_12",
"ID_12", "ID_12", "ID_13", "ID_14", "ID_15", "ID_16", "ID_17",
"ID_18", "ID_19"), n_clstr = c(5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 3L, 3L, 2L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 2L,
1L, 1L), clstr_number = c(1L, 2L, 3L, 4L, 5L, NA, NA, NA, NA,
NA, NA, NA, 1L, 1L, 1L, 1L, 2L, 3L, 4L, NA, NA, NA, NA, NA, 1L,
1L), value = c(0.35, 0.43, 0.51, 0.57, 1, NA, NA, NA, NA, NA,
NA, NA, 1, 1, 1, 0.2, 0.62, 0.79, 1, NA, NA, NA, NA, NA, 1, 1
)), row.names = c(NA, -26L), class = c("tbl_df", "tbl", "data.frame"
), spec = structure(list(cols = list(id = structure(list(), class = c("collector_integer",
"collector")), id2 = structure(list(), class = c("collector_integer",
"collector")), id3 = structure(list(), class = c("collector_character",
"collector")), n_clstr = structure(list(), class = c("collector_integer",
"collector")), clstr_number = structure(list(), class = c("collector_integer",
"collector")), value = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector"))), class = "col_spec"))
Таким образом, вы можете видеть, что данные сгруппированы по вложенным идентификаторам. Для краткости я не предоставил дополнительно id
, но их будет больше одного. Итак, шаги, которые я представляю себе:
- Группировка по `c (id, id2, id3)
- Заполнить номер clstr_n_cluster и назначить
clstr_number = seq(max(n_clstr)-n_clstr, n_clstr,1)
- Заполните соответствующие значения сверху
- Когда
n_cluster
уменьшается, заполните value
самыми высокими n
значениями
Но я не могу понять правильный синтаксис для завершения и заполнения при такой сложности, а также заполнения убывающих наборов. Окончательные данные будут выглядеть так:
dat_final <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), id2 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
X3 = c("ID_1", "ID_1", "ID_1", "ID_1", "ID_1", "ID_2", "ID_2",
"ID_2", "ID_2", "ID_2", "ID_3", "ID_3", "ID_3", "ID_3", "ID_3",
"ID_4", "ID_4", "ID_4", "ID_4", "ID_4", "ID_5", "ID_5", "ID_5",
"ID_5", "ID_5", "ID_6", "ID_6", "ID_6", "ID_7", "ID_7", "ID_7",
"ID_8", "ID_8", "ID_9", "ID_10", "ID_11", "ID_12", "ID_12",
"ID_12", "ID_12", "ID_13", "ID_13", "ID_13", "ID_13", "ID_14",
"ID_14", "ID_14", "ID_14", "ID_15", "ID_15", "ID_15", "ID_15",
"ID_16", "ID_16", "ID_16", "ID_16", "ID_17", "ID_18", "ID_19"
), n_clstr = c(5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 3L,
3L, 3L, 3L, 3L, 3L, 2L, 2L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 2L,
2L, 1L, 1L), clstr_number = c(1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L,
3L, 4L, 5L, 3L, 4L, 5L, 3L, 4L, 5L, 4L, 5L, 1L, 1L, 1L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L,
2L, 3L, 4L, 3L, 4L, 1L, 1L), value = c(0.35, 0.43, 0.51,
0.57, 1, 0.35, 0.43, 0.51, 0.57, 1, 0.35, 0.43, 0.51, 0.57,
1, 0.35, 0.43, 0.51, 0.57, 1, 0.35, 0.43, 0.51, 0.57, 1,
0.51, 0.57, 1, 0.51, 0.57, 1, 0.57, 1, 1, 1, 1, 0.2, 0.62,
0.79, 1, 0.2, 0.62, 0.79, 1, 0.2, 0.62, 0.79, 1, 0.2, 0.62,
0.79, 1, 0.62, 0.79, 1, 0.79, 1, 1, 1)), row.names = c(NA,
-59L), class = c("tbl_df", "tbl", "data.frame"), spec = structure(list(
cols = list(id = structure(list(), class = c("collector_integer",
"collector")), id2 = structure(list(), class = c("collector_integer",
"collector")), X3 = structure(list(), class = c("collector_character",
"collector")), n_clstr = structure(list(), class = c("collector_integer",
"collector")), clstr_number = structure(list(), class = c("collector_integer",
"collector")), value = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector"))), class = "col_spec"))