Search code examples
rformattingdata-management

need to reorganize data


I am new to R and have a data formatting question. I need to transform this:

Poly Tran Strat Surv MALLP MALLS MALLG MALLF GADWP GADWS GADWG GADWF
AL    1    M      y     1    2    0      0     1     4     0     0
ARL   1    M      y     0    0    0      0     0     0     20    0
AM    1    M      y     0    0    0      0     0     0     0     0
AM    2    M      y     1    0    0      0     0     0     0     5

to this:

Poly Tran Strat Surv  Spp   Num   Status
AL    1    M      y   mall   1      p
AL    1    M      y   mall   2      s
AL    1    M      y   gadw   1      p
AL    1    M      y   gadw   4      s
ARL   1    M      y   gadw   20     g
AM    2    M      y   mall   1      p
AM    2    M      y   gadw   5      f

I need some help!
Thankyou.


Solution

  • A solution using base R (except for reshape2::melt):

    dat2 <- reshape2::melt(dat, id.vars=c("Poly","Tran","Strat","Surv"))
    dat2 <- subset(dat2, subset = value > 0)
    dat2$variable <- as.character(dat2$variable)
    dat2$Status <- with(dat2, substr(tolower(variable), nchar(variable), nchar(variable)))
    dat2$variable <- with(dat2, substr(tolower(variable), 1, nchar(variable)-1))
    dat2 <- dat2[order(dat2$Tran),]
    colnames(dat2) <- c("Poly", "Tran", "Strat", "Surv", "Spp", "Num", "Status")
    rownames(dat2) <- NULL
    

    Results

    > dat2
    
      Poly Tran Strat Surv  Spp Num Status
    1   AL    1     M    y mall   1      p
    2   AL    1     M    y mall   2      s
    3   AL    1     M    y gadw   1      p
    4   AL    1     M    y gadw   4      s
    5  ARL    1     M    y gadw  20      g
    6   AM    2     M    y mall   1      p
    7   AM    2     M    y gadw   5      f
    

    Data

    dat <- read.csv(text = "Poly,Tran,Strat,Surv,MALLP,MALLS,MALLG,MALLF,GADWP,GADWS,GADWG,GADWF
    AL,1,M,y,1,2,0,0,1,4,0,0
    ARL,1,M,y,0,0,0,0,0,0,20,0
    AM,1,M,y,0,0,0,0,0,0,0,0
    AM,2,M,y,1,0,0,0,0,0,0,5")