如何在r中的表格中整齐地呈现两个因子的不同组合的输出?

Pro*_*nal 1 r

我有一个包含3列的数据集.前两列具有以下来自实验的输入值,并且是因子:

col1=[5,  5,  7,  5, 12,  7,  9,  9, 12, 12,  9,  7] 
col2=[3.0, 0.5, 1.0, 1.0, 0.5, 0.5, 1.0, 0.5, 1.0, 3.0, 3.0, 3.0]
Run Code Online (Sandbox Code Playgroud)

这些组合的结果中的第三列:

col3=[1.435078, 1.161110, 3.012732, 1.341047, 1.299615, 2.718960, 3.913285, 2.064090, 1.261958, 1.158850, 3.079639, 2.579303]
Run Code Online (Sandbox Code Playgroud)

我想要的是使用表格左侧的单个column2值和表格上方的列1值来显示数据,并且列3的值与两个因子的交集处显示的每个唯一因子组合相关.理想情况下,这看起来像这样:

|     | 5    | 7    | 9    | 12   |
|-----|------|------|------|------|
| 0.5 | 1.16 | 2.72 | 3.91 | 1.30 |
| 1.0 | 1.34 | 3.01 | 2.06 | 1.26 |
| 3.0 | 1.43 | 2.58 | 3.08 | 1.16 |
Run Code Online (Sandbox Code Playgroud)

我需要使用什么函数来生成这种简单的数据可视化?我试过table(),xtab(),list(),等人,但我似乎无法使用Google的小时后弄明白.

G. *_*eck 5

用途xtabs:

xt <- xtabs(col3 ~ col2 + col1)
Run Code Online (Sandbox Code Playgroud)

赠送:

> xt
     col1
col2         5        7        9       12
  0.5 1.161110 2.718960 2.064090 1.299615
  1   1.341047 3.012732 3.913285 1.261958
  3   1.435078 2.579303 3.079639 1.158850
Run Code Online (Sandbox Code Playgroud)

或者ftable(xt)用来获得略有不同的输出.

tapply也可以替代xtabs:

tapply(col3, data.frame(col2, col1), c)
Run Code Online (Sandbox Code Playgroud)

如果你想在细胞周围破折号,那么试试:

library(Hmisc)
print.char.matrix(xt, col.names = TRUE)
Run Code Online (Sandbox Code Playgroud)

赠送:

+----+--------+--------+--------+--------+
|col2|    5   |    7   |    9   |   12   |
+----+--------+--------+--------+--------+
| 0.5| 1.16111| 2.71896| 2.06409|1.299615|
+----+--------+--------+--------+--------+
|   1|1.341047|3.012732|3.913285|1.261958|
+----+--------+--------+--------+--------+
|   3|1.435078|2.579303|3.079639| 1.15885|
+----+--------+--------+--------+--------+
Run Code Online (Sandbox Code Playgroud)

注意

可重复形式的输入是:

col1 <- c(5,  5,  7,  5, 12,  7,  9,  9, 12, 12,  9,  7)
col2 <- c(3.0, 0.5, 1.0, 1.0, 0.5, 0.5, 1.0, 0.5, 1.0, 3.0, 3.0, 3.0)
col3 <- c(1.435078, 1.161110, 3.012732, 1.341047, 1.299615, 2.718960, 3.913285, 
  2.064090, 1.261958, 1.158850, 3.079639, 2.579303)
Run Code Online (Sandbox Code Playgroud)