R гибкое вертикальное слияние условно в другом столбце

В приведенном ниже примере я хотел бы вертикально объединить одинаковые значения в столбце 1, а затем вертикально объединить одинаковые значения в столбце 2 при условии, что они находятся в одной группе в столбце 1. Сейчас он объединяет G2 по группам a и b из v1, что не то, что я хотел бы. Есть ли способ добиться этого, используя встроенную функцию flextable или что-то подобное?

library(flextable)

dat <- data.frame(v1 = c(rep("a", 3), rep("b", 3), rep("c", 3)),
                  v2 = c("G1", "G1", "G2", "G2", "G3", "G3", "G4", "G5", "G6"),
                  v3 = c(1:9), stringsAsFactors = FALSE)

ft <- regulartable(dat)
ft <- merge_v(ft,j=c(1:2))

Ожидаемый результат


person Jordan Hackett    schedule 23.06.2020    source источник


Ответы (1)


Я бы создал для этого переменную (и использовал ее, но не отображал):

library(flextable)

dat <- data.frame(v1 = c(rep("a", 3), rep("b", 3), rep("c", 3)),
                  v2 = c("G1", "G1", "G2", "G2", "G3", "G3", "G4", "G5", "G6"),
                  v3 = c(1:9), 
                  stringsAsFactors = FALSE)
dat$v_dummy <- paste0(dat$v1, dat$v2)
ft <- flextable(dat, col_keys = c("v1", "v2", "v3"))
ft <- theme_box(ft)
ft <- merge_v(ft, j = c("v1", "v_dummy"), target = c("v1", "v2"))
ft

введите здесь описание изображения

person David Gohel    schedule 23.06.2020
comment
Извините, Дэвид, возможно, я недостаточно хорошо объяснил, это не совсем то, что я ищу. Я хотел бы, чтобы в столбце v2 были объединены только ячейки (1,2) и (5,6). т.е. НЕ ячейки (3,4), потому что первый G2 принадлежит к группе a, а второй G2 принадлежит к группе b. Имеет ли это смысл? - person Jordan Hackett; 23.06.2020
comment
Не могли бы вы опубликовать изображение / иллюстрацию того, что вы ожидаете? - person David Gohel; 25.06.2020
comment
Я отредактировал исходный пост с изображением ожидаемого результата. Обратите внимание, что v2 объединяется только тогда, когда содержится в одной группе v1. - person Jordan Hackett; 25.06.2020
comment
Большое спасибо за ваше время, Дэвид. Это именно то, что я искал :)! - person Jordan Hackett; 26.06.2020