省略 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
中第一个唯一条目之后的所有条目替换为空字符串。这也适用于分组数据框。
我想在 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
中第一个唯一条目之后的所有条目替换为空字符串。这也适用于分组数据框。