I like describeBy() from the psych package. Like this
df <- structure(list(custid. = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 
3L, 3L), value = c(1L, 3L, 2L, 5L, 4L, 1L, 1L, 10L, 1L, 2L, 5L
)), .Names = c("custid.", "value"), class = "data.frame", row.names = c(NA, 
-11L))
df
       custid. value
1        1     1
2        1     3
3        1     2
4        1     5
5        1     4
6        1     1
7        2     1
8        2    10
9        3     1
10       3     2
11       3     5
# install.packages(c("psych"), dependencies = TRUE)
require(psych)
 describeBy(df$value, df$custid.)
group: 1
  vars n mean   sd median trimmed  mad min max range skew kurtosis   se
1    1 6 2.67 1.63    2.5    2.67 2.22   1   5     4 0.21    -1.86 0.67
----------------------------------------------------------------------- 
group: 2
  vars n mean   sd median trimmed  mad min max range skew kurtosis  se
1    1 2  5.5 6.36    5.5     5.5 6.67   1  10     9    0    -2.75 4.5
----------------------------------------------------------------------- 
group: 3
  vars n mean   sd median trimmed  mad min max range skew kurtosis  se
1    1 3 2.67 2.08      2    2.67 1.48   1   5     4 0.29    -2.33 1.2
Or get it as a matrix if you prefer that,
 describeBy(df$value, df$custid., mat=T, skew = F)
   item group1 vars n     mean       sd median min max range        se
11    1      1    1 6 2.666667 1.632993    2.5   1   5     4 0.6666667
12    2      2    1 2 5.500000 6.363961    5.5   1  10     9 4.5000000
13    3      3    1 3 2.666667 2.081666    2.0   1   5     4 1.2018504