Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中合并tableGrob输出表中的垂直单元格?_R_Ggplot2_Gridextra_R Grid - Fatal编程技术网

如何在R中合并tableGrob输出表中的垂直单元格?

如何在R中合并tableGrob输出表中的垂直单元格?,r,ggplot2,gridextra,r-grid,R,Ggplot2,Gridextra,R Grid,我有一个类似于这里的问题,OP的目的是合并表中列的标题。在这里,我希望合并垂直排列的单元格组。以下是我用Microsoft Excel软件设计的目标表格:- 我尝试使用为问题指定的方法创建目标表 库(gridExtra) 图书馆(网格) 图书馆(GG2) 字母表为什么不先设置位置,然后将其发送到表格b # Set locations you want to put sounds at df2$toBind <- c(2, 5, 8) # Set locations to allow m

我有一个类似于这里的问题,OP的目的是合并表中列的标题。在这里,我希望合并垂直排列的单元格组。以下是我用Microsoft Excel软件设计的目标表格:-

我尝试使用为问题指定的方法创建目标表

库(gridExtra)
图书馆(网格)
图书馆(GG2)

字母表为什么不先设置位置,然后将其发送到
表格b

# Set locations you want to put sounds at
df2$toBind <- c(2, 5, 8)

# Set locations to allow merge
df1$toBind <- 1:nrow(df1)

# Merge them together
toPrint <-
  right_join(df2, df1) %>%
  mutate(sounds = ifelse(is.na(sounds)
                         , ""
                         , as.character(sounds))) %>%
  select(-toBind)

grid.table(toPrint, row = NULL)
这是在第一列(
l==1
)中查找不是第一行的所有内容(
t!=1
b!=1
),并将顶部和底部设置为新位置。您需要手动调整位置,或者根据实际数据以编程方式进行调整(例如,它应该匹配多少行,并为其执行算术)

作为补充,为了使合并的行更突出,您可能需要考虑在生成<代码> Tab2< /Cord> GROB时设置不同的背景颜色。e、 g.,:

tab2 <- tableGrob(df2
                  , theme = ttheme_default(core=list(bg_params = list(fill = c("white","darkgrey"), col=NA)) )
                  , rows = NULL)

tab2不完全符合您的要求,但一个简单快捷的解决方法是将“合并”单元格的名称放在该块的顶行,而不是其块的中间行。复杂但更准确的答案是更多地使用arrange.grid()函数,如所示。@Xizam这仍然是解决无法合并垂直单元格这一实际问题的一项工作(就像我们在excel软件中所做的那样)。我考虑了使用最上面一行标记块的想法。当方块尺寸有点长时,它在美学上不太好用。谢谢@Mark Peterson。你的解决方案比我的解决方案有所改进。不幸的是,它并没有达到[this]()解决方案在合并水平列时所做的效果。我误解了,并试图匹配您发布的内容,而不是我现在理解的合并。查看编辑以获得一个有效的版本。这是一种获取表格的非常酷的方法。对不起,我对$layout有点陌生。一个问题。因此,通过更改halign$layout$t,可以将不属于目标颜色的顶部和底部单元格移动到新位置。对吗。此外,当我们必须合并偶数个单元格(例如2个单元格)时,我们仍然会遇到问题。现在我会接受你的回答,因为它确实让我快到了。Cheeset移动每个单元格的顶部和底部位置(标题除外),而不仅仅是移动单元格并留下空白单元格。单元格的数量不是问题,它应该正确居中,只要你设置顶部和底部的位置。非常感谢你的努力。这个解决方案是完美的。我将尝试在本周晚些时候发布一个自动执行$layout算法的解决方案。干杯
# Set locations you want to put sounds at
df2$toBind <- c(2, 5, 8)

# Set locations to allow merge
df1$toBind <- 1:nrow(df1)

# Merge them together
toPrint <-
  right_join(df2, df1) %>%
  mutate(sounds = ifelse(is.na(sounds)
                         , ""
                         , as.character(sounds))) %>%
  select(-toBind)

grid.table(toPrint, row = NULL)
halign$layout[halign$layout$t != 1 &
                halign$layout$l == 1, c("t")] <-
  c(2,5,8,2,5,8)

halign$layout[halign$layout$b != 1  &
                halign$layout$l == 1, c("b")] <-
  c(4,7,10,4,7,10)

grid.draw(halign)
tab2 <- tableGrob(df2
                  , theme = ttheme_default(core=list(bg_params = list(fill = c("white","darkgrey"), col=NA)) )
                  , rows = NULL)
halign_alt <- combine(tab2,tab3, along =1)

halign_alt$layout[halign_alt$layout$t != 1 &
                    halign_alt$layout$l == 1, c("t")] <-
  c(2,5,7,2,5,7)

halign_alt$layout[halign_alt$layout$b != 1  &
                    halign_alt$layout$l == 1, c("b")] <-
  c(4,6,9,4,6,9)

grid.draw(halign_alt)