5

有谁知道如何将 describe.by 统计信息导出到 R 中的 csv?我收到这条消息:

estatistica <- describe.by(pag,list(pag$Jogo)

  write.table(estatistica,file="H:/Myfile.csv",sep=",")
  "Erro em as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : 
  cannot coerce class ""by"" to a data.frame"

既然这是一个一般性的问题,一个一般的例子就可以了。

        Jogo  Pais  Numero
          A  Canada    1
          B  Canada    2
          C  Canada    1
          D  Canada    4
          A  Brazyl    6
          B  Brazyl    7
          A  France    1
          B  France    1
          C  France    2
          D  France    3
4

2 回答 2

8

函数describeBy()(应该使用它而不是descrive.by()不推荐使用)生成数据框列表,因此不能使用write.table().

library(psych)    
estatistica <- describeBy(pag,list(pag$Jogo))
estatistica

: A
       var n mean   sd median trimmed  mad min max range skew kurtosis   se
Jogo*    1 3 1.00 0.00      1    1.00 0.00   1   1     0  NaN      NaN 0.00
Pais*    2 3 2.00 1.00      2    2.00 1.48   1   3     2 0.00    -2.33 0.58
Numero   3 3 2.67 2.89      1    2.67 0.00   1   6     5 0.38    -2.33 1.67
-------------------------------------------------------------------- 
: B
       var n mean   sd median trimmed  mad min max range skew kurtosis   se
Jogo*    1 3 2.00 0.00      2    2.00 0.00   2   2     0  NaN      NaN 0.00
Pais*    2 3 2.00 1.00      2    2.00 1.48   1   3     2 0.00    -2.33 0.58
Numero   3 3 3.33 3.21      2    3.33 1.48   1   7     6 0.34    -2.33 1.86

要解决此问题,一种方法是将所有列表元素放入一个数据框中,do.call()然后rbind()写入文件。这将创建数据框,其中组名称将添加到原始变量名称之前。

estatistica2<-do.call("rbind",estatistica)
estatistica2

         var n mean   sd median trimmed  mad min max range skew kurtosis   se
A.Jogo*    1 3 1.00 0.00    1.0    1.00 0.00   1   1     0  NaN      NaN 0.00
A.Pais*    2 3 2.00 1.00    2.0    2.00 1.48   1   3     2 0.00    -2.33 0.58
A.Numero   3 3 2.67 2.89    1.0    2.67 0.00   1   6     5 0.38    -2.33 1.67
B.Jogo*    1 3 2.00 0.00    2.0    2.00 0.00   2   2     0  NaN      NaN 0.00
B.Pais*    2 3 2.00 1.00    2.0    2.00 1.48   1   3     2 0.00    -2.33 0.58
B.Numero   3 3 3.33 3.21    2.0    3.33 1.48   1   7     6 0.34    -2.33 1.86
C.Jogo*    1 2 3.00 0.00    3.0    3.00 0.00   3   3     0  NaN      NaN 0.00
C.Pais*    2 2 2.50 0.71    2.5    2.50 0.74   2   3     1 0.00    -2.75 0.50
C.Numero   3 2 1.50 0.71    1.5    1.50 0.74   1   2     1 0.00    -2.75 0.50
D.Jogo*    1 2 4.00 0.00    4.0    4.00 0.00   4   4     0  NaN      NaN 0.00
D.Pais*    2 2 2.50 0.71    2.5    2.50 0.74   2   3     1 0.00    -2.75 0.50
D.Numero   3 2 3.50 0.71    3.5    3.50 0.74   3   4     1 0.00    -2.75 0.50
于 2013-04-29T14:18:34.067 回答
4

实际上, describeBy 中有一个选项可以为此创建矩阵形式的输出。使用原始数据,

describeBy(pag,pag$Jogo,mat=TRUE)

        item group1 var n     mean        sd median  trimmed    mad min max range      skew  kurtosis        se
Jogo*1     1      A   1 3 1.000000 0.0000000    1.0 1.000000 0.0000   1   1     0          NaN       NaN 0.0000000
Jogo*2     2      B   1 3 2.000000 0.0000000    2.0 2.000000 0.0000   2   2     0       NaN       NaN 0.0000000
Jogo*3     3      C   1 2 3.000000 0.0000000    3.0 3.000000 0.0000   3   3     0       NaN       NaN 0.0000000
Jogo*4     4      D   1 2 4.000000 0.0000000    4.0 4.000000 0.0000   4   4     0       NaN       NaN 0.0000000
Pais*1     5      A   2 3 2.000000 1.0000000    2.0 2.000000 1.4826   1   3     2 0.0000000 -2.333333 0.5773503
Pais*2     6      B   2 3 2.000000 1.0000000    2.0 2.000000 1.4826   1   3     2 0.0000000 -2.333333 0.5773503
Pais*3     7      C   2 2 2.500000 0.7071068    2.5 2.500000 0.7413   2   3     1 0.0000000 -2.750000 0.5000000
Pais*4     8      D   2 2 2.500000 0.7071068    2.5 2.500000 0.7413   2   3     1 0.0000000 -2.750000 0.5000000
Numero1    9      A   3 3 2.666667 2.8867513    1.0 2.666667 0.0000   1   6     5 0.3849002 -2.333333 1.6666667
Numero2   10      B   3 3 3.333333 3.2145503    2.0 3.333333 1.4826   1   7     6 0.3434206 -2.333333 1.8559215
Numero3   11      C   3 2 1.500000 0.7071068    1.5 1.500000 0.7413   1   2     1 0.0000000 -2.750000 0.5000000
Numero4   12      D   3 2 3.500000 0.7071068    3.5 3.500000 0.7413   3   4     1 0.0000000 -2.750000 0.5000000

不幸的是,当前版本没有 describeBy 通常所做的四舍五入输出。我已经在 1.3.6 版(即将发布)中修复了这个问题。

账单

于 2013-06-09T17:56:25.317 回答