How to change name of factor levels?

后端 未结 4 1351
不思量自难忘°
不思量自难忘° 2020-12-06 16:42

training set

trainSample <- cbind(data[1:980,1], data[1:980,2]) cl <-
factor(c(data[1:980,3]))

test set

相关标签:
4条回答
  • 2020-12-06 16:50

    Subscripted assignment also works. For example, here's a factor:

    > a <- factor(sample(letters[1:5],100,replace=T))
    > a
      [1] a d d d d a d d a b a b e a c d a c a a b e e d a e d e e a a c a a a b a
     [38] b b a a e b d b c a a a b e b c e d d b b c c a b a d c b c c d e b d e d
     [75] a a a b e e c b c b c c d d e e d a e e e b c e b e
    Levels: a b c d e
    

    Now, let's give a couple of those levels new names:

    > levels(a)[c(2,4)] <- c('y','z')
    > a
      [1] a z z z z a z z a y a y e a c z a c a a y e e z a e z e e a a c a a a y a
     [38] y y a a e y z y c a a a y e y c e z z y y c c a y a z c y c c z e y z e z
     [75] a a a y e e c y c y c c z z e e z a e e e y c e y e
    Levels: a y c z e
    
    0 讨论(0)
  • 2020-12-06 17:11

    It is very easy to change the factor levels and also not get confused about which is which:

    Example data:

    > a <- factor(rep(c(1,2,1),50))
    > a
      [1] 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2
     [75] 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1
    [149] 2 1
    Levels: 1 2
    
    #this will help later as a verification
    #this counts the instances for 1 and 2
    > table(a)
    a
      1   2 
    100  50 
    

    So as you can see above the order of the levels is 1 first and 2 second. When you change the levels (below) the order remains the same:

    #the assignment function levels can be used to change the levels
    #the order will remain the same i.e. 'c' for '1' and 'not-c' for '2'
    levels(a) <- c('c', 'not-c')
    
    > a
      [1] c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c    
     [25] c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c    
     [49] c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c    
     [73] c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c    
     [97] c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c    
    [121] c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c     c     not-c c    
    [145] c     not-c c     c     not-c c    
    Levels: c not-c
    

    And this is the verification:

    > table(a)
    a
        c not-c 
      100    50 
    
    0 讨论(0)
  • 2020-12-06 17:11

    use forcats package.

    a <- factor(rep(c(1,2,1),50))
    
    fct_collapse(a,c = c("1"),`not-c` = c("2"))
    
    0 讨论(0)
  • 2020-12-06 17:12

    You can do something like this:

    x<-factor(c(1,1,2,3,1), labels=c("group1","group2","group3")) 
    > x 
    [1] group1 group1 group2 group3 group1 
    Levels: group1 group2 group3
    

    Or like this:

    train <- read.csv("train.csv", header=TRUE)[1:1000, ]
    labels <- train[,1]
    
    0 讨论(0)
提交回复
热议问题