阻止R write.xlsx将宽数据转为长

时间:2015-09-09 17:57:32

标签: r xlsx

我需要将数据输出到xlsx,并且XLSX包似乎被广泛使用。

然而,使用它似乎将宽数据转换为长数据。我想在导出到Excel时保持数据的广泛。

library(xlsx)

myTable <- xtabs(mpg~carb+cyl, mtcars)

myTable

write.xlsx(myTable, "myFile.xlsx")

上面的代码是一个可以证明问题的最小例子。

控制台将输出myTable,如下所示:

> myTable
    cyl
carb     4     6     8
   1 137.9  39.5   0.0
   2 155.4   0.0  68.6
   3   0.0   0.0  48.9
   4   0.0  79.0  78.9
   6   0.0  19.7   0.0
   8   0.0   0.0  15.0

但是,Excel文件将以长格式显示相同的数据,如下所示:

    carb    cyl Freq
1   1   4   137.9
2   2   4   155.4
3   3   4   0
4   4   4   0
5   6   4   0
6   8   4   0
7   1   6   39.5
8   2   6   0
9   3   6   0
10  4   6   79
11  6   6   19.7
12  8   6   0
13  1   8   0
14  2   8   68.6
15  3   8   48.9
16  4   8   78.9
17  6   8   0
18  8   8   15

如果有人能帮助我理解为什么会发生这种情况或如何纠正它,我会很感激。

1 个答案:

答案 0 :(得分:1)

?write.xlsx的“详情”部分,提到:

  

如果x不是data.frame,它将被转换为一个。

我认为它是使用as.data.frame来实现的。

使用tabledata.frame对象转换为as.data.frame时,表格的原始结构将更改为“长”格式,这就是您在此处看到的内容。

要解决此问题,请使用as.data.frame.matrix,如下所示:

write.xlsx(as.data.frame.matrix(myTable), "myFile.xlsx")