1

私はこのデータセットを持っています:

Defects.I    Defects.D       Treatment
    1           2               A
    1           3               B

そして、検出され、分離され、治療ごとにグループ化された欠陥の記述統計を作成しようとしています。しばらく検索した後、psychdescribeBy() というライブラリに便利な関数を見つけました。次のコードを使用します。

describeBy(myData[1:2],myData$Treatment) 

私はこの出力を得ました:

Treatment A        
                  Mean.   Median.    Trimed.
    Defects.I       x        x          x
    Defects.D       x        x          x

Treatment B        
                  Mean.   Median.    Trimed.
    Defects.I       x        x          x
    Defects.D       x        x          x

しかし、実際には次のようなものを探していました

                  Mean.   Median.    Trimed.
                  A  B     A  B       A  B
    Defects.I     x  x     x  x       x  x 
    Defects.D     x  x     x  x       x  x

データ

myData <- structure(list(Defects.I = c(1L, 1L), Defects.D = 2:3, Treatment = c("A", 
"B")), .Names = c("Defects.I", "Defects.D", "Treatment"), class = "data.frame", row.names = c(NA, 
-2L))
4

2 に答える 2

2

mat = TRUE引数を試すことができます。それはまさにあなたが探しているものではありませんが、より近いです:

library(psych)
mydata = data.frame(Defects.I = c(1,1), Defects.D = c(2,3), Treatment = c('A','B'))

    describeBy(mydata[1:2], mydata$Treatment, mat = TRUE)

与える

           item group1 vars n mean sd median trimmed mad min max range skew kurtosis se
Defects.I1    1      A    1 1    1 NA      1       1   0   1   1     0   NA       NA NA
Defects.I2    2      B    1 1    1 NA      1       1   0   1   1     0   NA       NA NA
Defects.D1    3      A    2 1    2 NA      2       2   0   2   2     0   NA       NA NA
Defects.D2    4      B    2 1    3 NA      3       3   0   3   3     0   NA       NA NA
于 2016-10-28T00:14:05.550 に答える
2

describeByはデータ フレームのリストを返すのでcbind、それらすべてを返すこともできますが、正しい順序が得られません。代わりに、列をインターリーブできます

myData <- structure(list(Defects.I = c(1L, 1L), Defects.D = 2:3,
                         Treatment = c("A", "B")),
                    .Names = c("Defects.I", "Defects.D", "Treatment"),
                    class = "data.frame", row.names = c(NA, -2L))

l <- psych::describeBy(myData[1:2], myData$Treatment)

したがって、この順序を使用してインターリーブします

order(sequence(c(ncol(l$A), ncol(l$B))))
# [1]  1 14  2 15  3 16  4 17  5 18  6 19  7 20  8 21  9 22 10 23 11 24 12 25 13 26

cbind一人でやるよりも

c(1:13, 1:13)
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13  1  2  3  4  5  6  7  8  9 10 11 12 13

したがって、この

do.call('cbind', l)[, order(sequence(lengths(l)))]
#           A.vars B.vars A.n B.n A.mean B.mean A.sd B.sd A.median B.median A.trimmed B.trimmed A.mad B.mad
# Defects.I      1      1   1   1      1      1   NA   NA        1        1         1         1     0     0
# Defects.D      2      2   1   1      2      3   NA   NA        2        3         2         3     0     0
#           A.min B.min A.max B.max A.range B.range A.skew B.skew A.kurtosis B.kurtosis A.se B.se
# Defects.I     1     1     1     1       0       0     NA     NA         NA         NA   NA   NA
# Defects.D     2     3     2     3       0       0     NA     NA         NA         NA   NA   NA

または関数として

interleave <- function(l, how = c('cbind', 'rbind')) {
  how <- match.arg(how)
  if (how %in% 'rbind')
    do.call(how, l)[order(sequence(sapply(l, nrow))), ]
  else do.call(how, l)[, order(sequence(sapply(l, ncol))), ]
}

interleave(l)
#           A.vars B.vars A.n B.n
# Defects.I      1      1   1   1
# Defects.D      2      2   1   1 ...
# ...

interleave(l, 'r')
#             vars n mean sd median trimmed mad min max range skew kurtosis se
# A.Defects.I    1 1    1 NA      1       1   0   1   1     0   NA       NA NA
# B.Defects.I    1 1    1 NA      1       1   0   1   1     0   NA       NA NA
# A.Defects.D    2 1    2 NA      2       2   0   2   2     0   NA       NA NA
# B.Defects.D    2 1    3 NA      3       3   0   3   3     0   NA       NA NA
于 2016-10-28T00:53:50.520 に答える