省略 xtable markdown 中的单元格条目

omit cell entries in xtable markdown

我想在 table 中报告描述性值(我确信它们应该在 table 中而不是在数字中)。数据来自一个 3 因子实验,所以我能够用 xtable 生成的 table (我在 Rmarkdown 和 Knitr 中做它并且从未使用过 LaTex)包含一行每个数据值沿格式:

组|条件 |类型 |值

当所有行都打印在彼此下方时,这不是很可读,例如 "group" 条目在 10 行中保持不变。是否有可能只在第一次打印(在第一行)然后忽略它直到 "group" 更改为下一组(仅在第 11 行打印)? 我的 table 应该有 apa 格式,所以我使用 rapa::apa(mytable) 或 papaja::apa_table(mytable) 进行最终打印。 任何帮助将不胜感激,谢谢!

您可以使用带取反 (!) 的 duplicated 函数来仅在转换时保留 "group" 的值,但要小心这样做 不会导致其他列的信息丢失(如果它们很重要)。在演示数据集中,我们仅保留 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|

有几种不同的方法可以做到这一点。

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|

最后,我更改了数据帧,然后将其转换为 table。 ReplicationTable %>% mutate(dependent_variable = ifelse(duplicated(dependent_variable), "", dependent_variable) 这会将 dependent_variable 中第一个唯一条目之后的所有条目替换为空字符串。这也适用于分组数据框。