【问题标题】:omit cell entries in xtable markdown省略 xtable markdown 中的单元格条目
【发布时间】:2017-07-07 08:16:45
【问题描述】:

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

组 |条件 |类型 |价值

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

【问题讨论】:

    标签: r latex markdown knitr xtable


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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|
      

      【讨论】:

      • 感谢您的建议!这几乎就是我所追求的。在你原来的 dt 表中,我想要的是第一行包含“A”,然后它没有被打印,但是值被打印了,所以在值列中,它仍然说“1 1 2 2”只是最后三个条目在“组”列中没有“A”。仅在第 5 行中,应打印“B”,并在第 6,7 和 8 行中再次省略“B”,但应保留“3 3 4 4”。所以我不想丢失任何行,只是组列中某些单元格中的条目。不过感谢您的帮助!
      • @lilla 新代码将满足您的需求
      • 对不起,我正忙于其他事情,但我正在寻找编辑,谢谢!
      【解决方案3】:

      您可以使用带否定的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|
      

      【讨论】:

      • 感谢您的回答,这几乎就是我想要的,对不起,我无法更好地解释我的问题:与其省略中间的所有行,我想如果 cyl 的值与上面的行相同,则仅省略它。最后,cyl 列中应该只有一个数字,如果它指的是新的圆柱数,则表格的其余部分应如上所示打印,不变。我希望你明白我的意思?或者想象一下,我会按 cyl 对表格进行排序,这样只有在一组新的圆柱体开始时才会打印实际的 cyl 数量......
      猜你喜欢
      • 2017-11-04
      • 2014-02-19
      • 2015-09-10
      • 2013-12-07
      • 2017-12-28
      • 2017-07-15
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多