2017-05-07 48 views
0

我的目标是用数据框的输出生成出版质量表。该表应包含两级列标题。因此,变量应该被分组并且具有共同的标题的较高级别。试想一下,数据帧看起来像这样的:将数据框变量分组到子表中

df<-data.frame(Names=c(w,x,y,z), A_one=c(1,2,3,4), A_two=c(2,3,4,5), B_one=c(3,4,5,6), B_two=c(4,5,6,7)) 

我想有这样一个表(抱歉很差手工例子;-):

|Names|A  |B  | 
|  |one |two |one |two | 
|w |1 |2 |3 |4 | 
|x |2 |3 |4 |5 | 
|y |3 |4 |5 |6 | 
|z |4 |5 |6 |7 | 

你知道任何简单办法?

+1

如果这是为演示文稿或论文生成表格,请查看'xtable'包。 SO上有几篇文章介绍如何使用'xtable'来做到这一点。 – lmo

+0

你想要输出为html表格吗? – LyzandeR

+0

我需要一张纸张出版物的表格。我不使用LaTex。 – ungatoverde

回答

0

您可以使用tableHTML来创建这样的表格。

你可以这样做:

library(tableHTML) 
names(df) <- c(' ', 'one', 'two', 'one', 'two') 
tableHTML(df, 
      rownames = FALSE, 
      second_header = list(c(1, 2, 2), c('Names', 'A', 'B')), 
      widths = rep(50, 5), 
      theme = 'scientific') 

,输出:

enter image description here

我现在用的是科学的主题上面,但你可以选择不同的一个你喜欢的,或者你可以创建自己的使用add_css_*函数。

this tutorial你可以看到如何使用该软件包。

如果你想看到的桌子后面的HTML代码(这样你可以手动将它嵌入例如)您只需要使用print

mytable <- tableHTML(df, 
      rownames = FALSE, 
      second_header = list(c(1, 2, 2), c('Names', 'A', 'B')), 
      widths = rep(50, 5), 
      theme = 'scientific') 

print(mytable, viewer = FALSE) 

的代码也可以用write_tableHTML太导出。

+0

不错的主意,谢谢!我只有两个反对意见:1)一旦添加第二个标题,我应该改变“第一个标题”的名称。我该怎么做?我之前无法更改它们,因为否则数据框变量将具有相同的名称(一个,两个,一个,两个),这是不可能的。 2)我想我可以设置一个html表格,但是有没有其他可能的输出/格式使用这个或其他包?我正在使用R markdown撰写论文的初稿和MS Word。 – ungatoverde

+0

正如你在上面的答案中看到的,我首先更改了第一个标题,而且我有重复的列名。你可以做到这一点。如果你使用Rmarkdown,你可以用pdf格式导出它。 'tableHTML'正常工作。你也可以在word中使用html表格。如果你谷歌,你可以找到许多相关的职位。如果你想在一篇论文中使用表格,html是最好的选择(否则你需要在excel中手动完成并复制粘贴)。 – LyzandeR

+0

谢谢!偶然,我发现了包htmlTable。和tableHTML有什么不同吗?使用一个而不是另一个的任何理由? – ungatoverde