Ooops, my first suggestion reorders factor itself but

if (drop) factor(ans) else ans

instead of whole drop construction shall preserve levels order 
without changing order of factor

Petr

On 10 Aug 2006 at 16:32, Petr Pikal wrote:

From:                   "Petr Pikal" <[EMAIL PROTECTED]>
To:                     r-help@stat.math.ethz.ch
Date sent:              Thu, 10 Aug 2006 16:32:54 +0200
Priority:               normal
Subject:                [R] bug in interaction order when using drop?

> Hallo all
> 
> > version
>                _                                   
> platform       i386-pc-mingw32                       
> arch           i386                                  
> os             mingw32                               
> system         i386, mingw32                         
> status         beta                                  
> major          2                                   
> minor          3.1                                   
> year           2006                                  
> month          05                                   
> day            23                                   
> svn rev        38179                                 
> language       R                                   
> version.string Version 2.3.1 beta (2006-05-23 r38179)
> >
> 
> When I use interaction(....) without drop=T parameters I will get
> neatly organized factor with "protiproud" and "souproud" aligned.
> 
> > levels(interaction(vykon, teplota, proudeni))
>  [1] "3.750.protiproud"  "12.750.protiproud" "3.775.protiproud" 
> "12.775.protiproud" "3.800.protiproud"  "12.800.protiproud"
>  [7] "3.825.protiproud"  "12.825.protiproud" "3.850.protiproud" 
> "12.850.protiproud" "3.750.souproud"    "12.750.souproud"  [13]
> "3.775.souproud"    "12.775.souproud"   "3.800.souproud"   
> "12.800.souproud"   "3.825.souproud"    "12.825.souproud"  [19]
> "3.850.souproud"    "12.850.souproud"  
> 
> However when I use 
> 
> > levels(interaction(vykon, teplota, proudeni, drop=T))
> [1] "3.775.protiproud"  "3.800.souproud"    "3.750.souproud"    
> "12.850.souproud"   "12.825.protiproud"
> 
> everything is out of order. I know I can reorder any factor according
> to my wish but it would be good to have it ordered same way as without
> using drop.
> 
> Everything comes from unique in
> 
> if (drop) {
>         f <- unique(ans[!is.na(ans)])
>         ans <- match(ans, f)
>         lvs <- lvs[f]
> }
> 
> maybe it can be modified.
> 
> if (drop) {
>         f <- unique(ans[!is.na(ans)])
>         ord <- order(f)
>         ans <- match(ans, f)
>         lvs <- lvs[f[ord]]
>         }
> 
> which seems to work but I am not sure if it does not makes problems
> having NA in data.
> 
> Here is my data frame.
> Thank you 
> 
> Petr Pikal
> 
> > dump("df", file=stdout()) 
> df <-
> structure(list(proudeni = structure(as.integer(c(1, 1, 1, 1, 
> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 
> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 
> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
> 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 
> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 
> 1, 1, 1)), .Label = c("protiproud", "souproud"), class = "factor"), 
>     vykon = as.integer(c(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
>     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
>     3, 3, 3, 3, 3, 3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 
>     12, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
>     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
>     3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 3, 3, 
>     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
>     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12, 12, 12, 
>     12, 12, 12, 12, 12, 12, 12, 12, 12, 3, 3, 3, 3, 3, 3, 3, 
>     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
>     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12, 12, 12, 12, 12, 12, 
>     12, 12, 12, 12, 12, 12)), teplota = as.integer(c(775, 775, 
>     775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
>     775, 775, 775, 775, 800, 800, 800, 800, 800, 800, 800, 800, 
>     800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 750, 850, 
>     850, 850, 850, 850, 850, 825, 825, 825, 825, 825, 825, 775, 
>     775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
>     775, 775, 775, 775, 775, 800, 800, 800, 800, 800, 800, 800, 
>     800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 750, 
>     850, 850, 850, 850, 850, 850, 825, 825, 825, 825, 825, 825, 
>     775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
>     775, 775, 775, 775, 775, 775, 800, 800, 800, 800, 800, 800, 
>     800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 
>     750, 850, 850, 850, 850, 850, 850, 825, 825, 825, 825, 825, 
>     825, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
>     775, 775, 775, 775, 775, 775, 775, 800, 800, 800, 800, 800, 
>     800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, 
>     800, 750, 850, 850, 850, 850, 850, 850, 825, 825, 825, 825, 
>     825, 825))), .Names = c("proudeni", "vykon", "teplota"), 
> row.names = c("1", 
> "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
> "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
> "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35",
> "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46",
> "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57",
> "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68",
> "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
> "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90",
> "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101",
> "102", "103", "104", "105", "106", "107", "108", "109", "110", "111",
> "112", "113", "114", "115", "116", "117", "118", "119", "120", "121",
> "122", "123", "124", "125", "126", "127", "128", "129", "130", "131",
> "132", "133", "134", "135", "136", "137", "138", "139", "140", "141",
> "142", "143", "144", "145", "146", "147", "148", "149", "150", "151",
> "152", "153", "154", "155", "156", "157", "158", "159", "160", "161",
> "162", "163", "164", "165", "166", "167", "168", "169", "170", "171",
> "172", "173", "174", "175", "176", "177", "178", "179", "180", "181",
> "182", "183", "184", "185", "186", "187", "188", "189", "190", "191",
> "192", "193", "194", "195", "196"), class = "data.frame") > Petr Pikal
> [EMAIL PROTECTED]
> 
> ______________________________________________
> R-help@stat.math.ethz.ch 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.

Petr Pikal
[EMAIL PROTECTED]

______________________________________________
R-help@stat.math.ethz.ch 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.

Reply via email to