[R] Adding rownames with different lengths to a table

David Winsemius dwinsemius at comcast.net
Mon Apr 28 06:27:39 CEST 2008


David Winsemius <dwinsemius at comcast.net> wrote in 
news:Xns9A8DBD1CB2FF6dNOTwinscomcast at 80.91.229.13:

> filip rendel <filip61 at hotmail.com> wrote in
> news:BAY129-W482E25FE18F0FBDA8C7346B2DF0 at phx.gbl: 
> 
>> 
>> Hello! I would like to add names to a table. The table presents
>> median values, numbers of values (n) and percentage(%) for a given
>> agegroup. Thus I would like to add a label above these three
>> variables for each category. But if I try to use colnames I get a
>> message telling me that the number of labels must be equal to the
>> number of columns in the table. I hope someone could understand what
>> I mean! 
>> 
>>      [[alternative HTML version deleted]]
> 
> You can use indexing and I had better luck with names(), e.g.:
> 
> names(df)[5] <- "var.median"
> 
> ----example
>> table(rpois(100,5))
> 
>  1  2  3  4  5  6  7  8  9 10 11 
>  6  6  5 21 17 18 12  5  7  2  1 
>> xp <-  table(rpois(100,5))
>> class(xp)
> [1] "table"
>> names(xp)[5] <- "mode"
>> xp
>    1    2    3    4 mode    6    7    8    9   10   11 
>    5   10   15   16   19   12    8    6    6    2    1 
> 
> #--colnames appears not to work for this class---
>> colnames(xp)[4] <- "four"
> Error in dn[[2]] : subscript out of bounds
> 
> I would have thought that a table object was a "matrix-like object", 
> but I may be confusing the R definitions of arrays and matrices.

Prompted by an offlist email suggesting that tables only had one named 
dimension, I have looked at this again. I was wrong about tables not 
being acceptable arguments to colnames(). The error was in assuming 
that the above table, "xp", had one row and 11 columns. Instead, it's 
11 rows and 1 column. I was misled by the display orientation.

rownames(xp)[5:8] <- c("five", "six", "seven", "eight")
# no error
> xp
    1     2     3     4  five   six seven eight     9    10    11 
    5    10    15    16    19    12     8     6     6     2     1 

And tables can have both row and column names
airtb <- with(airquality, table(cut(Temp, quantile(Temp)), Month))

> str(airtb)
 'table' int [1:4, 1:5] 24 5 1 0 3 15 7 5 0 2 ...
 - attr(*, "dimnames")=List of 2
  ..$      : chr [1:4] "(56,72]" "(72,79]" "(79,85]" "(85,97]"
  ..$ Month: chr [1:5] "5" "6" "7" "8" ...

airtb
         Month
           5  6  7  8  9
  (56,72] 24  3  0  1 10
  (72,79]  5 15  2  9 10
  (79,85]  1  7 19  7  5
  (85,97]  0  5 10 14  5
> colnames(airtb)
[1] "5" "6" "7" "8" "9"

-- 
David Winsemius



More information about the R-help mailing list