R: Converting multiple binary columns into one factor variable whose factors are binary column names

后端 未结 4 1521
挽巷
挽巷 2021-01-03 02:09

I am a new R user. Currently I am working on a dataset wherein I have to transform the multiple binary columns into single factor column

Here is the example:

4条回答
  •  感情败类
    2021-01-03 02:36

    > mat <- matrix(c(0,1,0,0,0,
    +                 1,0,0,0,0,
    +                 0,0,0,1,0,
    +                 0,0,1,0,0,
    +                 0,0,0,0,1), ncol = 5, byrow = TRUE)
    > colnames(mat) <- c("Level1","Level2","Level3","Level4","Level5")
    > mat
         Level1 Level2 Level3 Level4 Level5
    [1,]      0      1      0      0      0
    [2,]      1      0      0      0      0
    [3,]      0      0      0      1      0
    [4,]      0      0      1      0      0
    [5,]      0      0      0      0      1
    

    Create a new factor based upon the index of each 1 in each row Use the matrix column names as the labels for each level

    NewFactor <- factor(apply(mat, 1, function(x) which(x == 1)), 
                        labels = colnames(mat)) 
    
    > NewFactor 
    [1] Level2 Level1 Level4 Level3 Level5 
    Levels: Level1 Level2 Level3 Level4 Level5 
    

    also you can try:

    factor(mat%*%(1:ncol(mat)), labels = colnames(mat)) 
    

    also use Tomas solution - ifounf somewhere in SO

    as.factor(colnames(mat)[mat %*% 1:ncol(mat)])
    

提交回复
热议问题