опускать записи ячеек в xtable markdown

Я хотел бы указать описательные значения в таблице (я уверен, что они должны быть в таблице, а не на рисунке). Данные получены в результате трехфакторного эксперимента, поэтому таблица, которую я могу создать с помощью xtable (я делаю это в Rmarkdown и Knitr и никогда не использовал LaTex), содержит одну строку для каждого значения данных в формате:

группа | состояние | тип | ценить

Когда все строки печатаются друг под другом, это не очень хорошо читается, например, запись «группа» остается неизменной для 10 строк. Есть ли возможность просто распечатать его в первый раз (в первой строке), а затем пропустить, пока «группа» не перейдет в следующую группу (распечатайте ее только в строке 11)? Моя таблица должна иметь формат apa, поэтому для окончательной печати я использую rapa :: apa (mytable) или papaja :: apa_table (mytable). Любая помощь будет оценена, спасибо!


person lilla    schedule 17.02.2017    source источник


Ответы (3)


Есть несколько способов сделать это.

library(data.table)

dt = data.table("Group" = c(rep("A",4),rep("B",4)), "value" = rep(1:4, each = 2))
knitr::kable(dt)

> dt
   Group value
1:     A     1
2:     A     1
3:     A     2
4:     A     2
5:     B     3
6:     B     3
7:     B     4
8:     B     4

Мы можем удалить дубликаты во всех строках

knitr::kable(dt[!duplicated(dt),])

|Group | value|
|:-----|-----:|
|A     |     1|
|A     |     2|
|B     |     3|
|B     |     4|

Или мы можем удалить дубликаты в соответствии с конкретными строками

knitr::kable(unique(dt,by = c("Group")))
|Group | value|
|:-----|-----:|
|A     |     1|
|B     |     3|

Затем, поскольку это может соответствовать нескольким параметрам, мы можем указать, какой из них мы хотим захватить.

knitr::kable(dt[unique(dt,by = c("Group")),.(Group, value), mult = "first"])
|Group | value|
|:-----|-----:|
|A     |     1|
|B     |     3|

knitr::kable(dt[unique(dt,by = c("Group")),.(Group, value), mult = "last"])
|Group | value|
|:-----|-----:|
|A     |     2|
|B     |     4|

ИЗМЕНИТЬ

Чтобы не печатать значения в определенной группе, которые были дублированы

dt$Group = ifelse(duplicated(dt$Group),"",dt$Group)
knitr::kable(dt)
|Group | value|
|:-----|-----:|
|A     |     1|
|      |     1|
|      |     2|
|      |     2|
|B     |     3|
|      |     3|
|      |     4|
|      |     4|
person Kristofersen    schedule 17.02.2017
comment
Спасибо вам за ваши предложения! Это почти то, что мне нужно. В вашей исходной таблице dt я бы хотел, чтобы первая строка содержала A, а затем она не печаталась, но значения были напечатаны, поэтому в столбце значений по-прежнему указано 1 1 2 2 только то, что три последние записи не в столбце «Группа» нет буквы «А». Только в строке 5 следует напечатать букву B, а в строках 6, 7 и 8 снова B следует опустить, но 3 3 4 4 должны остаться. Поэтому я не хочу терять ни одной строки, только запись в некоторых ячейках в столбце Group. Спасибо за вашу помощь! - person lilla; 17.02.2017
comment
@lilla Новый код сделает то, что вы ищете - person Kristofersen; 17.02.2017
comment
Извините, я был занят другими делами, но редактирование - это то, что я искал, спасибо! - person lilla; 04.03.2017

Вы можете использовать функцию duplicated с отрицанием (!) для сохранения значений «группы» только при переходах, но будьте осторожны, чтобы не потерять информацию из других столбцов (если они важны). В демонстрационном наборе данных мы сохраняем только переходы переменной cyl.

mtcarsSubset  = mtcars[,1:5]

knitr::kable(mtcarsSubset)

#|                    |  mpg| cyl|  disp|  hp| drat|
#|:-------------------|----:|---:|-----:|---:|----:|
#|Mazda RX4           | 21.0|   6| 160.0| 110| 3.90|
#|Mazda RX4 Wag       | 21.0|   6| 160.0| 110| 3.90|
#|Datsun 710          | 22.8|   4| 108.0|  93| 3.85|
#|Hornet 4 Drive      | 21.4|   6| 258.0| 110| 3.08|
#|Hornet Sportabout   | 18.7|   8| 360.0| 175| 3.15|
#|Valiant             | 18.1|   6| 225.0| 105| 2.76|
#|Duster 360          | 14.3|   8| 360.0| 245| 3.21|
#|Merc 240D           | 24.4|   4| 146.7|  62| 3.69|
#|Merc 230            | 22.8|   4| 140.8|  95| 3.92|
#|Merc 280            | 19.2|   6| 167.6| 123| 3.92|
#|Merc 280C           | 17.8|   6| 167.6| 123| 3.92|
#|Merc 450SE          | 16.4|   8| 275.8| 180| 3.07|
#|Merc 450SL          | 17.3|   8| 275.8| 180| 3.07|
#|Merc 450SLC         | 15.2|   8| 275.8| 180| 3.07|
#|Cadillac Fleetwood  | 10.4|   8| 472.0| 205| 2.93|
#|Lincoln Continental | 10.4|   8| 460.0| 215| 3.00|
#|Chrysler Imperial   | 14.7|   8| 440.0| 230| 3.23|
#|Fiat 128            | 32.4|   4|  78.7|  66| 4.08|
#|Honda Civic         | 30.4|   4|  75.7|  52| 4.93|
#|Toyota Corolla      | 33.9|   4|  71.1|  65| 4.22|
#|Toyota Corona       | 21.5|   4| 120.1|  97| 3.70|
#|Dodge Challenger    | 15.5|   8| 318.0| 150| 2.76|
#|AMC Javelin         | 15.2|   8| 304.0| 150| 3.15|
#|Camaro Z28          | 13.3|   8| 350.0| 245| 3.73|
#|Pontiac Firebird    | 19.2|   8| 400.0| 175| 3.08|
#|Fiat X1-9           | 27.3|   4|  79.0|  66| 4.08|
#|Porsche 914-2       | 26.0|   4| 120.3|  91| 4.43|
#|Lotus Europa        | 30.4|   4|  95.1| 113| 3.77|
#|Ford Pantera L      | 15.8|   8| 351.0| 264| 4.22|
#|Ferrari Dino        | 19.7|   6| 145.0| 175| 3.62|
#|Maserati Bora       | 15.0|   8| 301.0| 335| 3.54|
#|Volvo 142E          | 21.4|   4| 121.0| 109| 4.11|


knitr::kable(mtcarsSubset[!duplicated(mtcarsSubset$cyl),])

#|                  |  mpg| cyl| disp|  hp| drat|
#|:-----------------|----:|---:|----:|---:|----:|
#|Mazda RX4         | 21.0|   6|  160| 110| 3.90|
#|Datsun 710        | 22.8|   4|  108|  93| 3.85|
#|Hornet Sportabout | 18.7|   8|  360| 175| 3.15|
person Silence Dogood    schedule 17.02.2017
comment
Спасибо за ваш ответ, это почти то, что я искал, извините, я не смог лучше объяснить свою проблему: вместо того, чтобы пропустить все строки между ними, я хотел бы опустить только значение цил, если это то же самое, что и в строке выше. В конце концов, в столбце цилиндров должен быть только номер, если он относится к новому количеству цилиндров, остальная часть таблицы должна быть напечатана, как указано выше, без изменений. Надеюсь, вы понимаете, о чем я? Или, может быть, представьте, я бы отсортировал таблицу по цилиндрам, чтобы фактическое количество цилиндров печаталось только при начале новой группы цилиндров ... - person lilla; 17.02.2017

Наконец, я изменил фрейм данных, который затем преобразуется в таблицу. ReplicationTable %>% mutate(dependent_variable = ifelse(duplicated(dependent_variable), "", dependent_variable) Это заменяет все записи пустой строкой после первой уникальной записи в dependent_variable. Это также работает в сгруппированных фреймах данных.

person lilla    schedule 21.01.2021