1

私はこれを実行しました:

GroupSummary <- function(x){
    for (i in x) {
        if(i>0){
            p <-c(summary(x))
            r <- c(p)
        } else {if(i<0){
                n <-c(summary(x))
                r <- c(n)
            } else {stop}
        }
        return(r)
    }
}

x <- c(-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,1,2,3,4,5,6,7,8,9,10)
GroupSummary(x)

私は結果としてこれを得る:

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -10.00   -5.25    0.00    0.00    5.25   10.00 

私はそれを正の数のグループと負の数のグループの 2 つのグループに分けようとしています。両方を組み合わせないでください。ヒントやヘルプは大歓迎です

4

3 に答える 3

1

組み込みの を使用するとfivenum、以下を取得できます。

tapply(x,x>0,fivenum)
于 2013-06-27T13:43:19.167 に答える
0

これは必要な機能です。デフォルトでは負/正に対して機能しますが、任意のインデックスを使用できます (デフォルトの ind=NULL は正/負のインデックスを作成します)。ベクトルxindは同じ長さでなければならないので、この条件が満たされない場合は実行を停止します ( を使用stop)。

    groupSummary = function(x, ind=NULL) {
      if(is.null(ind)) {
        ind = character(length(x))
        ind[x>=0] = "positive"
        ind[x<0] = "negative"    
      }
      if(length(x)!=length(ind)) stop("'x' and 'ind' must have the same length.")
      out = do.call(rbind, tapply(x,INDEX=ind,FUN=summary))
      return(out)
    }

groupSummary(x)

         Min. 1st Qu. Median Mean 3rd Qu. Max.
negative  -10   -7.75   -5.5 -5.5   -3.25   -1
positive    1    3.25    5.5  5.5    7.75   10


set.seed(123) # to get the same output for 'colors' index
colors = sample(c("red", "blue", "green"), length(x), replace=TRUE)
groupSummary(x, colors)

      Min. 1st Qu. Median    Mean 3rd Qu. Max.
blue    -9   -5.00     -1 -3.0000     0.0    1
green  -10   -6.50     -4 -0.9091     5.0   10
red     -3   -0.75      4  3.1670     6.5    9

groupSummary(x, ind=1:3)
Error in groupSummary(x, ind = 1:3) : 
  'x' and 'ind' must have the same length.
于 2013-06-27T14:54:47.257 に答える