[R] confusion on levels() function, and how to assign a wanted order to factor levels, intentionally?

baptiste auguie baptiste.auguie at gmail.com
Tue Jun 16 11:33:01 CEST 2009


Hi,

I tend to use a slightly modified version of stats::relevel, (from an 
old thread on this list),

relevel =
function (x, ref, ...)
{
   lev <- levels(x)
   if (is.character(ref))
       ref <- match(ref, lev)
   if (any(is.na(ref)))
       stop("'ref' must be an existing level")
   nlev <- length(lev)
   if (any(ref < 1 | ref > nlev))
       stop(gettextf("ref = %d must be in 1:%d", ref, nlev),
           domain = NA)
   factor(x, levels = lev[c(ref, seq_along(lev)[-ref])])
}

levels(d$population)
my.order <- c("YXPy01", "KMPy01", "YLPy01", "GSPy02",
 "BCPy01", "LJPy01", "GYPt01", "YLPd01", "CYPd01", "CYPd02", "CYPd03",
"BXPd01", "NSPt01")
d$population <- relevel(d$population, my.order)
levels(d$population)


HTH,

baptiste

PS: I'm guessing many ggplot2 users also subscribe to r-help, it'd be 
nice not to post questions to both lists.



Mao Jianfeng wrote:
> Dear R-helpers,
>
> I want to make a series of boxplots on several numeric univariates with two
> group variables (species and population, population nested in species, and
> with population as the X-axis). In order to get a proper order of the
> individual populations in X-axis, I need to assign a wanted order to the
> factor (population). I used the levels() function to do this assignment, but
> it seemed levels() function not only changed the levels of the factor, but
> also the correlations of the  factor and the numeric variables.
>
> I am confused. And, I want to know how to assign a wanted order to factor
> levels, intentionally? I think assignment is also indispensible for others
> who are do data analysing using R. Can you help me?
>
> Thank you a lot in advance.
>
> Best regards,
> Mao J-F
>
> data, code, and results I used and got are as followed:
> (You can find that the correlations of the  factor and the numeric variables
> changed, before and after the levels() was performed.)
>
>
>   
>> d<-read.delim("All.txt",header=T)
>> d
>>     
>    species population conlen tscale fscale tseen    w100s nfsee
> 1       Py     YXPy01   8.60    153     69   111 1.680851    94
> 2       Py     YXPy01   8.10    173     74   139 1.848485   133
> 3       Py     YLPy01   6.50    138     58    99 1.520833    48
> 4       Py     YLPy01   5.90    153     67   118 1.355140   107
> 5       Py     KMPy01   6.10    113     48    75 1.470588    51
> 6       Py     KMPy01   5.10    129     54   100 1.176471    68
> 7       Py     KMPy01   3.90    109     37    30 1.500000    22
> 8       Py     KMPy01   5.00    128     55    71 1.468750    64
> 9       Py     KMPy01   4.70    132     54    32 1.500000    28
> 10      Py     KMPy01   5.80    113     52    65 1.136364    45
> 11      Py     KMPy01   4.70    114     42    71 1.131148    61
> 12      Py     KMPy01   5.00    120     77   131 1.403361   119
> 13      Py     GSPy02   6.20    152     59   102 1.348837    43
> 14      Py     GSPy02   6.20    111     41    64 2.805556    36
> 15      Py     GSPy02   6.70    130     56    67 1.757576    33
> 16      Py     GSPy02   6.60    115     47    78 1.603175    63
> 17      Py     GSPy02   8.90    137     61   102 1.767677    99
> 18      Py     GSPy02   6.20    157     68   115 1.459016    61
> 19      Py     BCPy01   5.30     91     39    24 1.263158    19
> 20      Py     BCPy01   6.10    100     46    53 1.117647    17
> 21      Py     BCPy01   4.50     81     32    46 1.320000    25
> 22      Py     LJPy01   6.60    170     65    72 2.035714    56
> 23      Py     LJPy01   6.90    104     46    58 1.800000    55
> 24      Py     LJPy01   8.60    161     66    38 1.794118    34
> 25      Py     LJPy01   5.40    123     40    22 2.428571    21
> 26      Py     LJPy01   6.80    123     54    57 2.044444    46
> 27      Py     LJPy01   8.60    166     77    77 1.847458    59
> 28      Py     LJPy01   6.00    132     51    91 1.119048    84
> 29      Py     LJPy01   6.80    108     45    27 1.814815    27
> 30      Py     LJPy01   6.20    115     48    70 1.765957    47
> 31      Py     LJPy01   8.00    168     80   132 2.036364   111
> 32      Pd     CYPd01   6.70    138     57    23 1.555556     9
> 33      Pd     CYPd01   6.80    121     46    53 1.973684    38
> 34      Pd     CYPd01   5.90    114     52    60 1.250000    12
> 35      Pd     CYPd01   5.20    119     53    53 1.432432    37
> 36      Pd     CYPd01   7.60    118     46    63 2.000000    23
> 37      Pd     CYPd01   6.10    144     61    24 1.428571    14
> 38      Pd     CYPd01   5.50    130     46    62 1.320000    54
> 39      Pd     CYPd01   6.60    153     57    83 1.558442    77
> 40      Pd     CYPd02   5.90    111     32    51 1.300000    10
> 41      Pd     CYPd02   7.10    121     51    80 1.451613    31
> 42      Pd     CYPd02   7.30    150     68   127 1.681416   113
> 43      Pd     CYPd02   5.60    121     38    64 1.228571    36
> 44      Pd     CYPd02   7.20    140     62    88 1.585366    41
> 45      Pd     CYPd02   6.10    113     54    91 1.256757    74
> 46      Pd     CYPd03   4.60    109     45    57 1.093750    32
> 47      Pd     CYPd03   4.90    115     44    45 1.235294    17
> 48      Pd     CYPd03   6.40    134     44    64 1.209302    45
> 49      Pd     CYPd03   4.60     96     42    41 1.150000    21
> 50      Pd     CYPd03   5.60    131     43    45 1.771429    35
> 51      Pd     CYPd03   6.10    124     48    59 1.578947    38
> 52      Pd     CYPd03   5.20    110     57    71 1.340426    47
> 53      Pd     CYPd03   5.50    118     57    83 1.625000    48
> 54      Pd     CYPd03   6.10    106     61    95 1.559322    60
> 55      Pd     CYPd03   6.20    121     64   100 1.707692    65
> 56      Pd     CYPd03   5.10     99     38    28 1.430000    20
> 57      Pd     CYPd03   5.10    132     45    47 1.791667    24
> 58      Pd     YLPd01   6.15    120     43    46 1.446000    21
> 59      Pt     BXPd01   4.60     64     18    23 2.166667    18
> 60      Pt     BXPd01   5.10     87     26    38 2.250000    32
> 61      Pt     BXPd01   4.80     89     27    50 2.130435    46
> 62      Pt     BXPd01   6.00     97     29    31 2.684211    19
> 63      Pt     BXPd01   5.20     98     32    54 2.292683    41
> 64      Pt     GYPt01   4.30     98     27     8 4.000000     5
> 65      Pt     GYPt01   4.00     82     27    51 2.781250    32
> 66      Pt     GYPt01   5.00    106     35     8 4.333333     6
> 67      Pt     GYPt01   5.10     86     24    25 3.375000    16
> 68      Pt     GYPt01   4.60     79     25    21 2.631579    19
> 69      Pt     GYPt01   5.00     80     30    23 2.823529    17
> 70      Pt     NSPt01   5.30    107     27    37 2.850000    33
> 71      Pt     NSPt01   5.40     85     26    38 2.270000    32
> 72      Pt     NSPt01   5.40    102     31    50 5.320000    40
> 73      Pt     NSPt01   5.10     84     23    29 5.320000    23
> 74      Pt     NSPt01     NA     NA     NA    NA       NA    NA
> 75      Pt     NSPt01   4.10     57     17    24 2.700000    18
>   
>> levels(d$population)
>>     
>  [1] "BCPy01" "BXPd01" "CYPd01" "CYPd02" "CYPd03" "GSPy02" "GYPt01" "KMPy01"
> "LJPy01" "NSPt01"
> [11] "YLPd01" "YLPy01" "YXPy01"
>   
>> levels(d$population)<-c("YXPy01", "KMPy01", "YLPy01", "GSPy02", "BCPy01",
>>     
> "LJPy01", "GYPt01", "YLPd01", "CYPd01", "CYPd02", "CYPd03", "BXPd01",
> "NSPt01")
>   
>> levels(d$population)
>>     
>  [1] "YXPy01" "KMPy01" "YLPy01" "GSPy02" "BCPy01" "LJPy01" "GYPt01" "YLPd01"
> "CYPd01" "CYPd02"
> [11] "CYPd03" "BXPd01" "NSPt01"
>   
>> d
>>     
>    species population conlen tscale fscale tseen    w100s nfsee
> 1       Pt     NSPt01   8.60    153     69   111 1.680851    94
> 2       Pt     NSPt01   8.10    173     74   139 1.848485   133
> 3       Pt     BXPd01   6.50    138     58    99 1.520833    48
> 4       Pt     BXPd01   5.90    153     67   118 1.355140   107
> 5       Pt     YLPd01   6.10    113     48    75 1.470588    51
> 6       Pt     YLPd01   5.10    129     54   100 1.176471    68
> 7       Pt     YLPd01   3.90    109     37    30 1.500000    22
> 8       Pt     YLPd01   5.00    128     55    71 1.468750    64
> 9       Pt     YLPd01   4.70    132     54    32 1.500000    28
> 10      Pt     YLPd01   5.80    113     52    65 1.136364    45
> 11      Pt     YLPd01   4.70    114     42    71 1.131148    61
> 12      Pt     YLPd01   5.00    120     77   131 1.403361   119
> 13      Pt     LJPy01   6.20    152     59   102 1.348837    43
> 14      Pt     LJPy01   6.20    111     41    64 2.805556    36
> 15      Pt     LJPy01   6.70    130     56    67 1.757576    33
> 16      Pt     LJPy01   6.60    115     47    78 1.603175    63
> 17      Pt     LJPy01   8.90    137     61   102 1.767677    99
> 18      Pt     LJPy01   6.20    157     68   115 1.459016    61
> 19      Pt     YXPy01   5.30     91     39    24 1.263158    19
> 20      Pt     YXPy01   6.10    100     46    53 1.117647    17
> 21      Pt     YXPy01   4.50     81     32    46 1.320000    25
> 22      Pt     CYPd01   6.60    170     65    72 2.035714    56
> 23      Pt     CYPd01   6.90    104     46    58 1.800000    55
> 24      Pt     CYPd01   8.60    161     66    38 1.794118    34
> 25      Pt     CYPd01   5.40    123     40    22 2.428571    21
> 26      Pt     CYPd01   6.80    123     54    57 2.044444    46
> 27      Pt     CYPd01   8.60    166     77    77 1.847458    59
> 28      Pt     CYPd01   6.00    132     51    91 1.119048    84
> 29      Pt     CYPd01   6.80    108     45    27 1.814815    27
> 30      Pt     CYPd01   6.20    115     48    70 1.765957    47
> 31      Pt     CYPd01   8.00    168     80   132 2.036364   111
> 32      Py     YLPy01   6.70    138     57    23 1.555556     9
> 33      Py     YLPy01   6.80    121     46    53 1.973684    38
> 34      Py     YLPy01   5.90    114     52    60 1.250000    12
> 35      Py     YLPy01   5.20    119     53    53 1.432432    37
> 36      Py     YLPy01   7.60    118     46    63 2.000000    23
> 37      Py     YLPy01   6.10    144     61    24 1.428571    14
> 38      Py     YLPy01   5.50    130     46    62 1.320000    54
> 39      Py     YLPy01   6.60    153     57    83 1.558442    77
> 40      Py     GSPy02   5.90    111     32    51 1.300000    10
> 41      Py     GSPy02   7.10    121     51    80 1.451613    31
> 42      Py     GSPy02   7.30    150     68   127 1.681416   113
> 43      Py     GSPy02   5.60    121     38    64 1.228571    36
> 44      Py     GSPy02   7.20    140     62    88 1.585366    41
> 45      Py     GSPy02   6.10    113     54    91 1.256757    74
> 46      Py     BCPy01   4.60    109     45    57 1.093750    32
> 47      Py     BCPy01   4.90    115     44    45 1.235294    17
> 48      Py     BCPy01   6.40    134     44    64 1.209302    45
> 49      Py     BCPy01   4.60     96     42    41 1.150000    21
> 50      Py     BCPy01   5.60    131     43    45 1.771429    35
> 51      Py     BCPy01   6.10    124     48    59 1.578947    38
> 52      Py     BCPy01   5.20    110     57    71 1.340426    47
> 53      Py     BCPy01   5.50    118     57    83 1.625000    48
> 54      Py     BCPy01   6.10    106     61    95 1.559322    60
> 55      Py     BCPy01   6.20    121     64   100 1.707692    65
> 56      Py     BCPy01   5.10     99     38    28 1.430000    20
> 57      Py     BCPy01   5.10    132     45    47 1.791667    24
> 58      Py     CYPd03   6.15    120     43    46 1.446000    21
> 59      Pd     KMPy01   4.60     64     18    23 2.166667    18
> 60      Pd     KMPy01   5.10     87     26    38 2.250000    32
> 61      Pd     KMPy01   4.80     89     27    50 2.130435    46
> 62      Pd     KMPy01   6.00     97     29    31 2.684211    19
> 63      Pd     KMPy01   5.20     98     32    54 2.292683    41
> 64      Pd     GYPt01   4.30     98     27     8 4.000000     5
> 65      Pd     GYPt01   4.00     82     27    51 2.781250    32
> 66      Pd     GYPt01   5.00    106     35     8 4.333333     6
> 67      Pd     GYPt01   5.10     86     24    25 3.375000    16
> 68      Pd     GYPt01   4.60     79     25    21 2.631579    19
> 69      Pd     GYPt01   5.00     80     30    23 2.823529    17
> 70      Pd     CYPd02   5.30    107     27    37 2.850000    33
> 71      Pd     CYPd02   5.40     85     26    38 2.270000    32
> 72      Pd     CYPd02   5.40    102     31    50 5.320000    40
> 73      Pd     CYPd02   5.10     84     23    29 5.320000    23
> 74      Pd     CYPd02     NA     NA     NA    NA       NA    NA
> 75      Pd     CYPd02   4.10     57     17    24 2.700000    18
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>   


-- 
_____________________________

Baptiste Auguié

School of Physics
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK

Phone: +44 1392 264187

http://newton.ex.ac.uk/research/emag




More information about the R-help mailing list