2017-06-22 92 views
0

我有一個data.frame data如下。基於另一個因素的重排因子水平

data <- structure(list(fac1 = structure(c(6L, 16L, 4L, 14L, 1L, 7L, 3L, 
              2L, 15L, 10L, 11L, 9L, 8L, 5L, 13L, 12L), .Label = c("dd85", 
                           "ee01", "ee12", "ee78", "gs85", "jj45", "jj63", "qe89", "qq74", 
                           "tt23", "tt78", "vd41", "vd51", "ww77", "yy25", "yy85"), class = "factor"), 
         fac2 = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 
              3L, 3L, 4L, 4L, 4L, 4L), .Label = c("md", "av", "zr", "kj"), class = "factor")), .Names = c("fac1", 
                                    "fac2"), row.names = c(NA, 16L), class = "data.frame") 


levels(data$fac1) 
levels(data$fac2) 

data 
    fac1 fac2 
1 jj45 md 
2 yy85 md 
3 ee78 md 
4 ww77 md 
5 dd85 av 
6 jj63 av 
7 ee12 av 
8 ee01 av 
9 yy25 zr 
10 tt23 zr 
11 tt78 zr 
12 qq74 zr 
13 qe89 kj 
14 gs85 kj 
15 vd51 kj 
16 vd41 kj 

levels(data$fac1) 
[1] "dd85" "ee01" "ee12" "ee78" "gs85" "jj45" "jj63" "qe89" "qq74" "tt23" "tt78" "vd41" "vd51" "ww77" "yy25" "yy85" 

levels(data$fac2) 
[1] "md" "av" "zr" "kj" 

如何的fac2的基礎上重新排列的fac1水平?

我試過factor(data, levels=data[order(data$fac2),], ordered=TRUE)根據這question,但它提供了兩個級別。

factor(data, levels=data[order(data$fac2),], ordered=TRUE) 
                fac1              fac2 
c(6, 16, 4, 14, 1, 7, 3, 2, 15, 10, 11, 9, 8, 5, 13, 12)  c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4) 
2 Levels: c(6, 16, 4, 14, 1, 7, 3, 2, 15, 10, 11, 9, 8, 5, 13, 12) < ... 

回答

1

假設我明白你是什麼之後,你可以嘗試在訂購data.frame,然後使fac1的水平(順序)。

data$fac1 <- factor(data$fac1, levels = data[order(data$fac2), "fac1"]) 
levels(data$fac1) 

> data 
    fac1 fac2 
1 jj45 md 
2 yy85 md 
3 ee78 md 
4 ww77 md 
5 dd85 av 
6 jj63 av 
7 ee12 av 
8 ee01 av 
9 yy25 zr 
10 tt23 zr 
11 tt78 zr 
12 qq74 zr 
13 qe89 kj 
14 gs85 kj 
15 vd51 kj 
16 vd41 kj 
> levels(data$fac1) 
[1] "jj45" "yy85" "ee78" "ww77" "dd85" "jj63" "ee12" "ee01" "yy25" 
[10] "tt23" "tt78" "qq74" "qe89" "gs85" "vd51" "vd41" 
相關問題