У меня есть данные о видах в аккуратном формате данных. Для включения в отчет мне нужно уменьшить ширину таблицы, указав высшие порядки (царство, тип, класс и т. д.) только один раз для каждой группы.
В настоящее время у меня есть:
... и нужно получить что-то вроде:
... или что-то вроде:
... где каждый более высокий порядок дается только один раз, причем каждый вид в этом более высоком порядке указан ниже.
Этот список длинный, поэтому он должен быть основан на сценарии. Я рассматривал использование dplyr
, но не вижу способа добиться этого.
Ниже приведены воспроизводимые примеры данных, если это необходимо.
exampledata <- structure(list(KINGDOM = c("Animalia", "Animalia", "Animalia",
"Animalia", "Animalia", "Animalia", "Animalia", "Animalia", "Animalia",
"Animalia", "Animalia", "Animalia"), PHYLYM = c("Chordata", "Chordata",
"Chordata", "Chordata", "Chordata", "Chordata", "Chordata", "Chordata",
"Chordata", "Chordata", "Chordata", "Chordata"), CLASS = c("Amphibia",
"Amphibia", "Amphibia", "Amphibia", "Amphibia", "Aves", "Aves",
"Aves", "Aves", "Aves", "Aves", "Aves"), ORDER = c("Anura", "Anura",
"Anura", "Anura", "Anura", "Accipitriformes", "Ciconiiformes",
"Gruiformes", "Passeriformes", "Passeriformes", "Pelecaniformes",
"Pelecaniformes"), FAMILY = c("Ranidae", "Ranidae", "Rhacophoridae",
"Rhacophoridae", "Rhacophoridae", "Accipitridae", "Ciconiidae",
"Gruidae", "Muscicapidae", "Muscicapidae", "Threskiornithidae",
"Threskiornithidae"), SCIENTIFICNAME = c("Hylarana attigua",
"Hylarana taipehensis", "Philautus", "Polypedates leucomystax",
"Theloderma asperum", "Aviceda jerdoni", "Leptoptilos javanicus",
"Antigone antigone", "Cyanoptila cyanomelana", "Cyornis hainanus",
"Pseudibis davisoni", "Thaumatibis gigantea"), OTHERDATA = c("XYZ",
"ABC", "XYZ", "ABC", "XYZ", "XYZ", "ABC", "XYZ", "ABC", "ABC",
"XYZ", "XYZ")), row.names = c(NA, 12L), class = "data.frame")
Вы можете попробовать пакет gt
для его меток строк: github.com/rstudio/gt Это также, вероятно, можно сделать в dplyr
, используя mutate_all
и что-то, чтобы изменить все значения на пустые, если следующая запись такая же.
Вы можете использовать collapse_rows()
из кабеля: haozhu233.github.io/kableExtra/awesome_table_in_html.html
Как правило, удалять данные - плохая идея, однако я вижу вариант использования.
Если у вас уже есть данные в правильном порядке, вы можете сделать что-то вроде этого:
iris %>%
mutate(Species = if_else(duplicated(Species),"", as.character(Species)))
Обратите внимание, что as.character()
требуется только потому, что Species
является фактором в этом наборе данных.
Отредактируйте, например, данные:
exampledata %>%
mutate_at(vars("KINGDOM", "PHYLYM", "CLASS","ORDER", "FAMILY", "SCIENTIFICNAME"), ~ if_else(duplicated(.x),"", as.character(.x)) )
дает такую таблицу:
KINGDOM PHYLYM CLASS ORDER FAMILY SCIENTIFICNAME OTHERDATA
1 Animalia Chordata Amphibia Anura Ranidae Hylarana attigua XYZ
2 Hylarana taipehensis ABC
3 Rhacophoridae Philautus XYZ
4 Polypedates leucomystax ABC
5 Theloderma asperum XYZ
6 Aves Accipitriformes Accipitridae Aviceda jerdoni XYZ
7 Ciconiiformes Ciconiidae Leptoptilos javanicus ABC
8 Gruiformes Gruidae Antigone antigone XYZ
9 Passeriformes Muscicapidae Cyanoptila cyanomelana ABC
10 Cyornis hainanus ABC
11 Pelecaniformes Threskiornithidae Pseudibis davisoni XYZ
12 Thaumatibis gigantea XYZ
Спасибо, это работает хорошо. HTML-эквивалентом этого является collapse_rows()
от kableExtra.
Вместо пустых ячеек, если вы хотите уменьшить данные, я бы предложил group_by
более высокие порядки и сохранил другие данные в виде строки, разделенной запятыми.
library(dplyr)
exampledata %>%
group_by(KINGDOM, PHYLYM, CLASS, ORDER, FAMILY) %>%
summarise_at(vars(SCIENTIFICNAME, OTHERDATA), toString)
# KINGDOM PHYLYM CLASS ORDER FAMILY SCIENTIFICNAME OTHERDATA
# <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#1 Animalia Chordata Amphibia Anura Ranidae Hylarana attigua, Hylarana taipehensis XYZ, ABC
#2 Animalia Chordata Amphibia Anura Rhacophoridae Philautus, Polypedates leucomystax, Theloderm… XYZ, ABC, X…
#3 Animalia Chordata Aves Accipitrifor… Accipitridae Aviceda jerdoni XYZ
#4 Animalia Chordata Aves Ciconiiformes Ciconiidae Leptoptilos javanicus ABC
#5 Animalia Chordata Aves Gruiformes Gruidae Antigone antigone XYZ
#6 Animalia Chordata Aves Passeriformes Muscicapidae Cyanoptila cyanomelana, Cyornis hainanus ABC, ABC
#7 Animalia Chordata Aves Pelecaniform… Threskiornith… Pseudibis davisoni, Thaumatibis gigantea XYZ, XYZ
Используя этот метод, вы не теряете никакой информации, а также уменьшаете количество строк в фрейме данных. Вы можете добавлять/удалять столбцы из group_by
и summarise_at
по своему усмотрению.
Спасибо. К сожалению, это не дает более узкой таблицы, которая является целью.
Включайте данные в воспроизводимом формате, который можно копировать и вставлять. Скриншоты кода/данных никогда не бывают полезными, так как извлечь данные из изображения непросто. Может быть полезно взглянуть на то, как предоставить минимальный воспроизводимый пример/попытка.