split                  package:base                  R Documentation

_D_i_v_i_d_e _i_n_t_o _G_r_o_u_p_s

_D_e_s_c_r_i_p_t_i_o_n:

     'split' divides the data in the vector 'x' into the groups defined
     by 'f'.  The assignment forms replace values corresponding to such
     a division.  Unsplit reverses the effect of 'split'.

_U_s_a_g_e:

     split(x, f)
     split(x, f) <- value
     unsplit(value, f)

_A_r_g_u_m_e_n_t_s:

       x: vector or data frame containing values to be divided into
          groups.

       f: a "factor" such that 'factor(f)' defines the grouping, or a
          list of such factors in which case their interaction is used
          for the grouping.

   value: a list of vectors or data frames compatible with a splitting
          of 'x'. Recycling applies if the lengths do not match.

_D_e_t_a_i_l_s:

     'split' and 'split<-' are generic functions with default and
     'data.frame' methods.

     'f' is recycled as necessary and if the length of 'x' is not a
     multiple of the length of 'f' a warning is printed. 'unsplit'
     works only with  lists of vectors. The data frame method can also
     be used to split a matrix into a list of matrices, and the
     assignment form likewise, provided they are invoked explicitly.

     Any missing values in 'f' are dropped together with the
     corresponding values of 'x'.

_V_a_l_u_e:

     The value returned from 'split' is a list of vectors containing
     the values for the groups.  The components of the list are named
     by the _used_ factor levels given by 'f'.  (If 'f' is longer than
     'x' then some of the components will be of zero length.)

     The assignment forms return their right hand side. 'unsplit'
     returns a vector for which 'split(x, f)' equals 'value'

_R_e_f_e_r_e_n_c_e_s:

     Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S
     Language_. Wadsworth & Brooks/Cole.

_S_e_e _A_l_s_o:

     'cut'

_E_x_a_m_p_l_e_s:

     require(stats)
     n <- 10; nn <- 100
     g <- factor(round(n * runif(n * nn)))
     x <- rnorm(n * nn) + sqrt(as.numeric(g))
     xg <- split(x, g)
     boxplot(xg, col = "lavender", notch = TRUE, varwidth = TRUE)
     sapply(xg, length)
     sapply(xg, mean)

     ## Calculate z-scores by group

     z <- unsplit(lapply(split(x, g), scale), g)
     tapply(z, g, mean)

     # or

     z <- x
     split(z, g) <- lapply(split(x, g), scale)
     tapply(z, g, sd)

     ## Split a matrix into a list by columns
     ma <- cbind(x = 1:10, y = (-4:5)^2)
     split(ma, col(ma))

     split(1:10, 1:2)

